class Person:
greeting = 'Hello'
def __repr__(self):
return self.greeting
>>> Sam = Person()
>>> Sam.greeting
'Hello'
>>> Sam
Hello
我很难理解为什么 __repr__ 函数返回 self.greeting 而不带引号。任何帮助是极大的赞赏。
REPL 输出repr
对象的。
如果你说
>>> 'Hello'
显示“”的repr 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'
要了解这里发生了什么,让我们遵循 REPL 的“思考过程”:
考虑输入Sam
:
Person
对象。repr()
从第 1 步调用了这个东西,根据类定义,我得到了字符串Hello
(五个字符,没有引号)。print()
了它。print()
打印没有语法引号的字符串,所以你什么也得不到。现在考虑s.greeting
:
str
对象。repr()
从第 1 步调用这个东西。 Perstr
的__repr__()
方法(它具有添加引号的逻辑,因为它知道字符串的表示需要引号),我取回字符串'Hello'
(七个字符,包括实际引号)。print()
了它。如果你调用repr()
函数,它返回Person
对象。但是如果你想返回字符串值,你可以使用str()
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
rep = 'Person(' + self.name + ',' + str(self.age) + ')'
return rep
person = Person("John", 24)```
print(repr(person)) # Person(John,24)