python中关于__repr__问题
class vector2d:def __init__(self,x,y):
self.x = x
self.y = y
print('abc:', self)# 当print里面有self的时候就会调用__repr__
def __iter__(self):
return (i for i in (self.x, self.y))
def __repr__(self):
print(234)
class_name = type(self).__name__
# self前面不加* 为什么会超过最大递归深度, 这里又没有print(self),也会调用__repr__吗?
return '{}({!r},{!r})'.format(class_name, *self)
v = vector2d(3,4)
请问:
1.在print('abc:', self) 处为什么是以下面的格式打印
abc: 234
vector2d(3,4)
而不是
234
abc: vector2d(3,4)
2.__repr__里面的问题
谢谢! print 的实现与下面这段代码类似,你可以自己思考一下from sys import stdout
def print(*value, sep=' ', end='\n', file=stdout, flush=False):
value = iter(value)
try:
file.write(str(next(value)))
except StopIteration:
pass
for i in value:
file.write(sep)
file.write(str(i))
file.write(end)
if flush:
file.flush()如果说要得到你想要的结果,那么可以试一下这个函数:from sys import stdout
def print(*value, sep=' ', end='\n', file=stdout, flush=False):
file.write(sep.join(map(str, value)))
file.write(end)
if flush:
file.flush()format 格式化 {!r} 就是调用 __repr__ 啊…… 请问在您写的第二个print函数中,是在str(self)的时候调用__repr__然后就先打印'123'吗,谢谢
页:
[1]