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)
这里有两个概念:继承和
__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__
可以找到它并根据需要构建你的字符串。
__str__
类的 Super
方法将被调用,除非它被子类中的 __str__
方法覆盖