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



想象一下,我有三个类,如代码片段所示。

在类A中,我有类变量和类方法,我想在多次继承后在类C中访问它们,即C(A,B(,其中B只是另一个类。我发现我可以通过self访问类方法和变量super((或使用类名it self,即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())

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

例如,

1.如果类C中有另一个info(),无论是类方法还是实例方法

self.info()

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

2.如果class C(B, A)的继承顺序不同,并且类B中有另一个info(),无论是类方法还是实例方法

super().info()

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

最新更新