想象一下,我有三个类,如代码片段所示。
在类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.如果类 将调用类 2.如果 将调用类C
中有另一个info()
,无论是类方法还是实例方法self.info()
C
中定义的方法,而不是类A
中的方法class C(B, A)
的继承顺序不同,并且类B
中有另一个info()
,无论是类方法还是实例方法super().info()
B
中定义的方法,而不是类A
中的方法