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() 参数(什么也不要做)
答案 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)