为什么这个 __repr__ 函数 return 不是一个字符串?
Why doesn't this __repr__ function return a string?
class Person:
greeting = 'Hello'
def __repr__(self):
return self.greeting
>>> Sam = Person()
>>> Sam.greeting
'Hello'
>>> Sam
Hello
我很难理解为什么 __repr__ 函数 returns self.greeting 没有引号。非常感谢任何帮助。
REPL输出对象的repr
。
如果你说
>>> 'Hello'
显示“Hello
”的repr,即“'Hello'
”
因为您要返回 Hello
而不是 'Hello'
- 这就是 REPL
中显示的内容
如果您希望 Person.repr
像普通字符串 repr
一样工作,您只需在 self.greeting
上调用 repr
>>> class Person:
... greeting = 'Hello'
... def __repr__(self):
... return repr(self.greeting)
...
>>> Sam = Person()
>>> Sam
'Hello'
要了解这里发生了什么,让我们跟随 REPL 的 "thought process":
考虑输入 Sam
:
- 这是我要显示的对象。这是一个
Person
对象。
- 我对第 1 步中的事物调用
repr()
,根据 class 定义,我得到了字符串 Hello
(五个字符,没有引号)。
- 为了实际显示第 2 步中的内容,我对其调用
print()
。
- 我相信我们都同意
print()
打印不带句法引号的字符串,因此您不会得到任何引号。
现在考虑 s.greeting
:
- 这是我要显示的对象。这是一个
str
对象。
- 我在步骤 1 中调用
repr()
。根据 str
的 __repr__()
方法(它具有添加引号的逻辑,因为它知道 表示 的字符串需要引号),我取回字符串 'Hello'
(七个字符,包括实际引号)。
- 为了实际显示第 2 步中的内容,我对其调用
print()
。
- 由于字符串实际上包含这些引号,因此它们出现在输出中。
如果你调用repr()
函数,它returns Person
对象。但是如果你想 return 字符串值,你可以使用 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)
class Person:
greeting = 'Hello'
def __repr__(self):
return self.greeting
>>> Sam = Person()
>>> Sam.greeting
'Hello'
>>> Sam
Hello
我很难理解为什么 __repr__ 函数 returns self.greeting 没有引号。非常感谢任何帮助。
REPL输出对象的repr
。
如果你说
>>> 'Hello'
显示“Hello
”的repr,即“'Hello'
”
因为您要返回 Hello
而不是 'Hello'
- 这就是 REPL
如果您希望 Person.repr
像普通字符串 repr
一样工作,您只需在 self.greeting
repr
>>> class Person:
... greeting = 'Hello'
... def __repr__(self):
... return repr(self.greeting)
...
>>> Sam = Person()
>>> Sam
'Hello'
要了解这里发生了什么,让我们跟随 REPL 的 "thought process":
考虑输入 Sam
:
- 这是我要显示的对象。这是一个
Person
对象。 - 我对第 1 步中的事物调用
repr()
,根据 class 定义,我得到了字符串Hello
(五个字符,没有引号)。 - 为了实际显示第 2 步中的内容,我对其调用
print()
。 - 我相信我们都同意
print()
打印不带句法引号的字符串,因此您不会得到任何引号。
现在考虑 s.greeting
:
- 这是我要显示的对象。这是一个
str
对象。 - 我在步骤 1 中调用
repr()
。根据str
的__repr__()
方法(它具有添加引号的逻辑,因为它知道 表示 的字符串需要引号),我取回字符串'Hello'
(七个字符,包括实际引号)。 - 为了实际显示第 2 步中的内容,我对其调用
print()
。 - 由于字符串实际上包含这些引号,因此它们出现在输出中。
如果你调用repr()
函数,它returns Person
对象。但是如果你想 return 字符串值,你可以使用 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)