@staticmethod,谁能解释以下python代码?

时间:2019-11-30 13:10:57

标签: python

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与其他方法的区别。

1 个答案:

答案 0 :(得分:1)

这里的每个类都(直接或间接)继承自A(这就是class B2(A):告诉您的内容)。

由于它们继承自A,因此可以访问A的方法。 @staticmethod装饰器所做的所有事情都是禁止在实例上将self隐式传递给方法,这样A.a()A().a()的工作原理相同;同样,B2.a()B2().a()的工作方式相同,调用A.a()