如何从 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
中定义的方法
假设我有三个 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