刚刚遇到一个示例分数类,不太确定这两个方法之间的区别。一旦__str__
被实现,show
就不会变成redundent吗?
def __str__(self):
return str(self.num)+"/"+str(self.den)
def show(self):
print(self.num,"/",self.den)
我意识到__str__
是一个魔术方法,它的实现负责处理任何需要类的字符串版本的上下文。只是看不到show(self)
方法的意义?
编辑
是否显示大多数类所需的泛型方法?
我的问题是,如果我有一个分数x,那么我所需要做的就是print(x)
,然后我将看到1\2
或者这个实例所保存的内容—那么为什么要麻烦实现一个额外的方法show
?
__str__
方法非常小心地确保所有内容都是一个str
,因此它返回一个str
。show
方法依赖于print隐式地将self.num
和self.den
转换为str。它将结果显示为副作用,并且不返回任何结果print
将在每个参数之间插入一个空格。如果你不在乎额外的空间,真的没有理由不使用
也许作者认为不这样做更清楚。
当你试图创建一个子类时,这种方式分离
show
和__str__
也可能令人惊讶。如果子类重写__str__
,那么您可能也会希望该更改反映在show
中。__str__
是一个神奇的方法,每次将对象作为字符串处理时都会调用它,例如str(fraction_instance)
使用
__str__
方法的目的是创建对象的字符串表示形式。__str__
应该返回字符串。如果__str__
的实现代替打印字符串表示,而不返回任何内容,则当对象在字符串上下文中使用时,将引发TypeError
。例如:如果我们要显示这样的分数对象:
我们有个例外:
这是因为
__str__
用于获取对象的字符串表示,而不是打印它(按照约定,只要返回字符串,就可以打印)。这就是print
语句/函数与__str__
方法一起使用的功能。另一方面,像
show
这样的方法:在上述情况下基本上等同于
print(f)
(除了它包含操作数旁边的空格)。show
用于输出字符串表示,而__str__
用于获取表示。但是,可以将附加逻辑添加到
show
中,这在构造字符串表示时是不适当/不必要的,因此使用这两种方法是有意义的。但是,您可以使用像
show
这样的方法,其中print
语句不合适,即:相关问题 更多 >
编程相关推荐