为什么在子类上使用 print 时会调用父类的 __str__ 函数

问题描述 投票:0回答:2

Sub
继承自
Super
,实现了
__str__
功能。为什么在
__str__
实例上使用
print
时会调用
Sub
函数?

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)
python function inheritance
2个回答
1
投票

这里有两个概念:继承

__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

最后,在您的示例中,您为

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


0
投票

__str__
类的
Super
方法将被调用,除非它被子类中的
__str__
方法覆盖

© www.soinside.com 2019 - 2024. All rights reserved.