请问__str__函数的调用问题
本帖最后由 Twilight6 于 2020-7-13 21:42 编辑代码如下:
import time as t
class Mytimer():
def __str__(self):
return self.prompt
__repr__=__str__
def begin(self):
self.start=t.localtime()
print("现在开始计时")
def end(self):
self.stop=t.localtime()
self.calc()
print("计时结束")
def calc(self):
self.lasted=[]
self.prompt="总共运行了"
for i in range(6):
self.lasted.append(self.stop-self.start)
self.prompt+=str(self.lasted)
这时候运行代码:
w=Mytimer()
w.begin()
w.stop
然后print(w),显示:总共运行了0000012
或者我直接w,显示:总共运行了0000012.
为什么显示结果一样?__str__跟__init__一样,在类实例时被自动调用吗? str应该是被返回字符串时的触发操作
print返回的是一个字符串 请用这个发代码,你的代码中的 [ i] 变成了编辑器的标签
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
liuzhengyuan 发表于 2020-7-13 21:42
请用这个发代码,你的代码中的 [ i] 变成了编辑器的标签
如何正确地发代码、上传图片和附件?
收到,十分感谢。之前不知道怎么上传
你调用都调用错了, 你应该调用的是 w.end() 而不是 w.stop() 你的类中并没有定义 stop() 方法,而定义了 end() 方法
__str__方法其实是在print()对象时调用,所以可以自己定义 str 字符串的返回信息,在该方法 return 一个字符串,如果不是字符串则报错
__repr__ 魔法方法:是在控制台直接输出一个对象信息或者print一个对象信息时调用
如果自定了__str__ ,print 时默认执行__str__
如果没有自定 __str__ ,则 print 时执行 __repr__
所以你直接 w 时候是调用了__repr__ 魔法方法,而 __repr__魔法方法被赋值为 __str__ 则此时调用的还是 __str__ 方法
所以这个时候你 print(w) 和直接 w 都是一样的,最终都是调用了 __str__ 冰河星云 发表于 2020-7-13 21:42
str应该是被返回字符串时的触发操作
print返回的是一个字符串
你好。我不是很懂这句话。我以为只有print()了,才会调用__str__函数。 KONGYIYAO 发表于 2020-7-13 21:48
你好。我不是很懂这句话。我以为只有print()了,才会调用__str__函数。
你理解的没错,当类中定义了 __str__ 魔法方法时候,print 就会自动调用 KONGYIYAO 发表于 2020-7-13 21:48
你好。我不是很懂这句话。我以为只有print()了,才会调用__str__函数。
只要 retuen 字符串 就会触发额 Twilight6 发表于 2020-7-13 21:46
你调用都调用错了, 你应该调用的是 w.end() 而不是 w.stop() 你的类中并没有定义 stop() 方法,而定义 ...
十分感谢。直接用w,等于调用了__repr__方法,直接输出对象信息。然后我代码中又赋值为__repr__=__str__,等同于print(w)的意思吗? KONGYIYAO 发表于 2020-7-13 22:00
十分感谢。直接用w,等于调用了__repr__方法,直接输出对象信息。然后我代码中又赋值为__repr__=__str__ ...
理解正确!
页:
[1]