2016-10-17 136 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