如何从python中的子类静态方法访问父类实例方法?

时间:2019-01-08 11:53:30

标签: python python-3.x

class P(object):

    def __init__(self):
        print('Parent')

    @staticmethod
    def M1():
        print('parent Static')

    @classmethod
    def M2(cls):
        print('parent class method')

    def M3(self):
        print('Instance Method')


class Q(P):

    @staticmethod
    def W1():
       super(Q,Q).M3()##Here I am getting error

Q.W1()
  

TypeError:必须首先以Q实例调用未绑定方法M3()   参数(什么也不要做)

1 个答案:

答案 0 :(得分:1)

P.M3不是静态的或类方法。

在方法签名中注意self

def M3(self):

没有P对象的实例,就无法从W1调用它。

您尝试执行的操作类似于P.M3(),但这将不起作用。

从Q staticmethod,您可以在基类中调用其他静态/类方法,但是,要调用实例方法则需要instance。 Q中的静态方法不提供实例,因此它将无法在基类中调用实例方法。

您可以使用多种方法来调用M3,但这取决于您的实际需求。例如:

class Q(P):
    @staticmethod
    def W1():
        p = P()
        p.M3()

    @staticmethod
    def W2(p):
        p.M3()


Q.W1()

some_p = P()
Q.W2(some_p)

some_q = Q()
Q.W2(some_q)