如何从 class 访问 class 方法和 class 变量到 Python 中另一个 class 的实例方法?

How to access class method and class variable from a class to another class's instance method in Python?

假设我有三个 classes,如代码片段所示。

在 class A 中,我有 class 变量和 class 方法,我想在多重继承后在 class C 中访问它们,即 C(A ,B) 其中 B 只是另一个 class。我发现我可以通过 self.super(). 或使用 class 自己命名,即 A.

问题是,如果有的话,建议的访问方式是什么。或者,这三个都一样好? 提前致谢。 问候, DS

class A():
    school='XYZ'
    def __init__(self):
        print('in init A')
    def feature1(self):
        print('Feature1-A working')
    def feature2(self):
        print('Feature2-A working')

    @classmethod
    def show_avg(cls,m1,m2,m3):
        return (m1+m2+m3)/3
    @classmethod
    def info(cls):
        return cls.school

class B():
    def __init__(self):
        print('in init B')
    def feature3(self):
        print('Feature1-B working')
    def feature4(self):
        print('Feature2-B working')

class C(A,B):
    def __init__(self):
        super().__init__()
        print('in init C') 
    def get_avg_from_super_class(self):
        avg1=self.show_avg(2,3,4)
        avg2=super().show_avg(2,3,4)
        avg3=A.show_avg(2,3,4)
        print('avg by calling self:{}, avg by calling super():{}, avg by alling class name:{}'.format(avg1,avg2,avg3))
    def get_info(self):
        print (A.info())
        print(self.info())
        print(super().info())

对于您的代码,这三种方式中的任何一种都可以正常工作。
但总的来说,我会说使用 class 名称访问 class 方法 class 变量 是确保您访问正确 methods/variables 的最安全 方式。

例如,

1.If 你在 class C 中有另一个 info() 无论是 class 方法 还是实例方法,

self.info()

将调用 class C 中定义的方法,而不是 class A

中定义的方法

2.If 继承顺序与 class C(B, A) 不同,您在 class B 中还有另一个 info() 是否是 class 方法 实例方法,

super().info()

将调用 class B 中定义的方法,而不是 class A

中定义的方法