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

时间:2019-01-25 12:47:35

标签: 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()

2 个答案:

答案 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)