2017-04-24 98 views
0

我是Python新手。从基类调用函数

我有一个类有一些常见的定义,将用于模块中的其他几个类。这是我的程序的当前结构。

class A(object): 

    def __init__(self, x, y): 
     """Initialization method""" 
     super(A, self).__init__() 
     self.x = x 
     self.y = y 

    def function_1(self, ftype): 
     <<<some steps>>> 
     return abc 

    def function_2(self, stype): 
     <<<some steps>>>   
     return xyz 

class B(A): 
    def __init__(self, x, y, e_type): 
     A.__init__(self, x, y) 
     self.e_type = enablement_type 

    def function_3(self, mtype): 
     <<<some steps>>> 
     **HERE I need to call the function1 and function2 of class A** 

1:打电话是从基类中的功能

A.function1(self, ftype='new') 
    A.function2(self, stype='new') 

是正确的方法是什么? Pylint说,当我这样做的时候一切都很好。

2:另外,你能在简单的条件,并请

+0

我会建议您[ “Python入门”(https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjc9s7tv73TAhXKrY8KHZ_oAxwQFggiMAA&url=http% 3A'2F%2Fstock.ethop.org%2Fpdf%2Fpython%2FLearning%2520Python%2C%25205th%2520Edition.pdf&usg = AFQjCNH2hxNCd_36JzxBTsnu2R8238dF_A&sig2 = FcfkvLSeVGgY1OqEDEEENQ)Oops page 781 Part VI –

回答

0

通常阐述超,你会打电话继承了这样的功能:

self.function1('new') 
self.function2('new') 

你写什么都可以工作,但需要你找出确切包含这些方法的基类。这是一个复杂情况,并且可能会出现错误,通过继承可以轻松避免错误。

+0

'self'是一个'B'类实例OP想要调用这两种方法的地方 –

+0

是的,而且由于继承,“B”对象也是“A”对象。 – jasonharper

+0

是的,因为你的答案应该补充说,不需要添加'A .__ init __(self,x,y)'OP不理解继承和交换其他对象 –

1

对于你的第一个问题: 你在做什么是代码的可重用性与继承的概念。

一旦你说'B类(A)',A的所有成员和功能都可以在B中使用。因此,U可以直接调用乙函数像下面

self.function1(ftype='new') 
self.function2(stype='new') 

这是一种访问在Python实例的任何函数的典型方式。 无论您提到的问题是只访问任何其他文件中的静态函数。无论如何,这是行得通的。但它与继承无关。

对于您的第二个问题: 在继承的情况下,可以选择完全重新定义从基类通用的可重复使用的功能或延长一些功能对于特殊情况或只是使用,因为它是。 在扩展现有函数的情况下,你需要做的是覆盖你想要扩展的函数,它的主体应该调用所有的基类函数,然后调用附加的代码。这里调用基类的功能与super.function()

def function1(self, ftype): 
    super.function1(self, ftype) 
    # the new code specific to this class goes here 

初始化()是特殊的功能,称为构造函数中完成。在实例化类像'objInstance = B()'时被调用。其他功能如上所述进行处理。

希望它澄清你的疑惑。

+0

我必须写super()。function1(self,ftype)。否则,我收到一个错误。这是因为一个不同的python版本? (我在verison 3.5.2上) – Jodo