类“ 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()
答案 0 :(得分:3)
Y类的子类如何访问作为其父类的X类。
Python具有多重继承,因此一个类可能拥有多个父类。所有这些都由“ mro”(方法顺序解析度)和the super()
object处理,使您可以从mro中的“ next”类访问方法。
现在请注意,在您的代码段中,真正的问题根本不是“访问父类”,而是您正在尝试访问 global “ 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")
答案 1 :(得分:-1)
在y类的初始化中,您还必须初始化要继承的父类。
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)