Python 如何访问子类中的父类方法
类“X”是父类,类“Y”是X的子类。类Y子类如何访问其父类XPython 如何访问子类中的父类方法,python,python-3.x,oop,Python,Python 3.x,Oop,类“X”是父类,类“Y”是X的子类。类Y子类如何访问其父类X class x: def __init__(self,text): self.text = t def printThis(self): text = self.text print(text) class y(x): def test(): printThis(text) a = y("printing") a.printThis() 在
class x:
def __init__(self,text):
self.text = t
def printThis(self):
text = self.text
print(text)
class y(x):
def test():
printThis(text)
a = y("printing")
a.printThis()
在y类init中,还必须初始化要从中继承的父类
class x:
def __init__(self, text):
self.text = text
class y(x):
def __init__ (self, #other vars here ):
x.__init__(self, text)
self.othervars = othervars
def test():
self.printThis(self.text)
类Y子类如何访问其父类X类
Python具有多重继承,因此一个类可能有多个父类。所有这些都由“mro”(方法顺序解析)来处理,并允许您从mro中的“下一个”类访问方法
现在请注意,在您的代码片段中,真正的问题根本不是“访问父类”,而是您试图访问一个未定义的全局“printThis”名称。Python没有像Java那样的“暗示”,您必须使用self
来引用实例属性或方法,因此您需要的是:
class Y(X):
def test(self):
self.printThis()
为了说明这一点,这与父类无关,在同一类中调用printThis()
而不调用self
也会遇到同样的问题:
class Example():
def __init__(self, text):
self.text = text
def printThis(self):
print(self.text)
def test(self):
# this will fail just as well
printThis()
另外,这里不需要super()
,Python将在定义此名称的mro中的第一个类上解析printThis
。当您的子类重新定义父类的方法并且仍然希望调用父类的实现时,您需要super()
,即:
class Example():
def __init__(self, text):
self.text = text
def printThis(self):
print(self.text)
class Child(Example):
def printThis(self):
print("this is a test")
super().printThis()
print("test passed")
您可能需要
def test(self):self.printThis()
。如果您没有在\uuuu init\uuuuu
中执行任何操作,您可以忽略它。