首页 > 解决方案 > 为什么在子级上使用打印时调用父类的__str__函数

问题描述

SubSuper是从哪个实现__str__函数继承的。为什么在实例上__str__使用时调用该函数?printSub

class Super:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "My name is " + self.name + "."


class Sub(Super):
    def __init__(self, name):
        Super.__init__(self, name)


obj = Sub("Andy")

print(obj)

标签: pythonfunctioninheritance

解决方案


这里有两个概念:继承__str__函数。

当您print在类实例上使用时,它将检查__str__您的类中的函数。请参阅文档

试试这个例子:

class MyClass:
    def __str__(self):
        return "My string"

myClassInstance = MyClass()

print(myClassInstance)  # My string

在您的情况下,如果您不重新定义它们,则Sub 继承Super该类的所有功能Super都存在的含义。Sub

此示例将与前一个示例相同:

class MyParentClass:

    def __str__(self):
        return "My string"


class MyChildClass(MyParentClass):
    pass


myChildClass = MyChildClass()

print(myChildClass)  # My string

最后,在您的示例中,您nameSuper类定义了一个属性。因为Sub构造函数正在调用Super构造函数,所以您的类中也有一个name属性Sub。所以__str__可以找到它并根据需要构建您的字符串。


推荐阅读