python - 为什么在子级上使用打印时调用父类的__str__函数
问题描述
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__
可以找到它并根据需要构建您的字符串。
推荐阅读
- iis - 未写入 IIS 日志
- python - 无法使用 Playwright 和 BeautifulSoup 抓取元素
- ajax - JSF/PrimeFaces:基于选择的可见性
- apache-spark - persist(StorageLevel.MEMORY_AND_DISK) 如何在 Spark 3.1 中使用 Java 实现
- python - 如何在python中导入文件?
- python - 从一个目录到另一个目录查找
- jenkins - groovy:: java.lang.IllegalArgumentException: 预期命名参数但得到
- laravel - Laravel 使用关系过滤查询结果
- excel - 从特定联系人(发件人)和 Outlook 中不同收件箱地址的电子邮件中提取 pdf 文件
- javascript - 如何使用 InAppBrowser react-native (android) 防止重复使用先前会话的 cookie