class abc():
def xyz(self):
print("Class abc")
class foo(abc):
def xyz(self):
print("class foo")
x = foo()
我想调用父类的xyz()之类的东西;
x.super().xyz()
答案 0 :(得分:0)
使用这种单继承,我认为最简单的方法是通过类调用方法,并显式传递self
:
abc.xyz(x)
使用super
会更通用(尽管我想不到一个好用例):
super(type(x), x).xyz()
哪个将返回一个超级对象,可以将其视为父类,而将子对象视为self
。
如果您希望使用与语法完全一样的东西,只需为您的类(您的abc
类,这样每个继承的人都提供一个超级方法)即可:
def super(self):
return super(type(self), self)
,现在x.super().xyz()
将起作用。如果您使类继承自foo
,它将无法正常运行,因为您将只能上一层(即回到foo
)。
我不知道访问隐藏方法的方式是通过对象。
仅用于踢球,这是一个更强大的版本,允许使用跟踪super
调用的专用类将超级调用链接起来:
class Super:
def __init__(self, obj, counter=0):
self.obj = obj
self.counter = counter
def super(self):
return Super(self.obj, self.counter+1)
def __getattr__(self, att):
return getattr(super(type(self.obj).mro()[self.counter], self.obj), att)
class abc():
def xyz(self):
print("Class abc", type(self))
def super(self):
return Super(self)
class foo(abc):
def xyz(self):
print("class foo")
class buzz(foo):
def xyz(self):
print("class buzz")
buzz().super().xyz()
buzz().super().super().xyz()
产生
class foo
Class abc