2016-10-17 138 views
1

有沒有什麼辦法可以訪問父類的方法,而無需實際調用類?繼承使用父類方法而不調用父類

例如爲:

1)

class A(): 
    def __init__(self): 
     print('A class') 

    def name(): 
     print('name from A class') 

2)

class B(A): 
    # I want to make use of name without actually calling or running A. 
    # Is there any way to do that? 
+1

*使用的名字,而不實際調用或運行* - 你怎麼使用/調用'名()'方法,而不實際調用呢? – RomanPerekhrest

回答

2

呀,你可以直接調用它。這工作得很好:

class A(): 
    def __init__(self): 
     print('A class') 

    def name(self): 
     print('name from A class') 

class B(A): 
    pass 

B().name() 

> A class 
> name from A class 

您還可以使用它的類裏面,像

class B(A): 
    def b_name(self): 
     print('I am B!') 
     self.name() 

如果你想避開什麼叫A的init,那麼也許你應該把name成一類方法:

class A(): 
    def __init__(self): 
     print('A class') 

    @classmethod 
    def name(self): 
     print('name from A class') 

A.name() 

> name from A class 

或者,你可以得到B,一個init不調用父類,從而將其實例化withou調用A的init。我並不特別推薦此方法:

class A(): 
    def __init__(self): 
     print('A class') 

    def name(self): 
     print('name from A class') 

class B(A): 
    def __init__(self): 
     print('B class') 

    def b_name(self): 
     print('b_name from B class') 
     self.name() 

B().b_name() 

> B class 
> b_name from B class 
> name from A class 
+0

非常感謝您的考慮。 –

+0

但我正在研究我的大學項目,這個項目很複雜而且很難解釋。 我想要的是調用B()。name而不實際給A的__init__ –

+0

如果你只是想避免初始化,也許'name'是一個classmethod? – Meerness