class Person:
greeting = 'Hello'
def __repr__(self):
return self.greeting
>>> Sam = Person()
>>> Sam.greeting
'Hello'
>>> Sam
Hello
我很难理解为什么__repr__函数返回self.greeting而没有引号。非常感谢任何帮助。
答案 0 :(得分:2)
REPL输出对象的repr
。
如果你说
>>> 'Hello'
显示“Hello
”的代表,即“'Hello'
”
由于您要返回Hello
而不是'Hello'
- 这是REPL中显示的内容
如果您希望Person.repr
像普通字符串repr
一样工作,则只需拨打repr
上的self.greeting
>>> class Person:
... greeting = 'Hello'
... def __repr__(self):
... return repr(self.greeting)
...
>>> Sam = Person()
>>> Sam
'Hello'
答案 1 :(得分:0)
要了解这里发生了什么,让我们按照REPL的“思考过程”进行:
考虑输入Sam
:
Person
对象。repr()
,根据类定义,我找回字符串Hello
(五个字符,没有引号)。print()
。print()
打印没有句法引号的字符串,所以你没有得到任何字符串。现在考虑s.greeting
:
str
对象。repr()
。每个str
的{{1}}方法(其中包含添加引号的逻辑,因为它知道表示一个字符串需要引号),我找回字符串__repr__()
(七个字符,包括实际引号)。'Hello'
。