2017-04-24 97 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