class A:
def __init__(self):
pass
@staticmethod
def a():
return "a"
class B1(A):
def __init__(self):
super().__init__()
@staticmethod
def a():
return "b"
class B2(A):
def __init__(self):
super().__init__()
class C1(B1):
def __init__(self):
super().__init__()
@staticmethod
def a():
return super(C1, C1).a()
class C2(B1):
def __init__(self):
super().__init__()
@staticmethod
def a():
return super(B1, B1).a()
这是我正在理解的一个棘手的事情。
B2().a()
返回a,即使B2没有称为a()的方法。
为什么?
此外,我不太了解staticmethod与其他方法的区别。
答案 0 :(得分:1)
这里的每个类都(直接或间接)继承自A
(这就是class B2(A):
告诉您的内容)。
由于它们继承自A
,因此可以访问A
的方法。 @staticmethod
装饰器所做的所有事情都是禁止在实例上将self
隐式传递给方法,这样A.a()
和A().a()
的工作原理相同;同样,B2.a()
和B2().a()
的工作方式相同,调用A.a()
。