Python 如何访问子类中的父类方法

Python 如何访问子类中的父类方法,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() 在

类“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()

在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
中执行任何操作,您可以忽略它。