Python属性魔术

Python属性魔术,python,Python,在这个简单的代码段中,internal()函数实际上是什么时候被调用的? 我读过python属性,但我不确定它在这里有什么魔力 >>> class Magic: ... @property ... def __repr__(self): ... def inner(): ... return "It works!" ... return inner ... >>> repr(Magic()

在这个简单的代码段中,
internal()
函数实际上是什么时候被调用的? 我读过python属性,但我不确定它在这里有什么魔力

>>> class Magic:
...     @property
...     def __repr__(self):
...         def inner():
...             return "It works!"
...         return inner
...
>>> repr(Magic())
'It works!'
当我删除
“@property”
时,我得到一个预期错误:

TypeError: __repr__ returned non-string (type function)
应该给人一个可读的对象表示

返回包含对象的可打印表示形式的字符串

对于许多类型,此函数尝试返回一个字符串,该字符串将在传递给eval()时生成具有相同值的对象,否则,表示为尖括号中的字符串,其中包含对象类型的名称以及通常包括对象名称和地址在内的附加信息。类可以通过定义_repr__()方法来控制此函数为其实例返回的内容

您正在返回一个函数。 尝试:


关于
@属性
decorator,以及一般的decorator,也值得一读。。。看


要回答“实际何时调用internal()函数?”,请参见下文。当
repr()
代表您调用
Magic.\uu\repr\uuuu()
时,会调用它

#/usr/bin/env蟒蛇3
def my_decorator(信息):
定义my_dec_内部(自我):
返回“测试”
返回我的\u dec\u inner
课堂魔术:
@我的装饰师
定义报告(自我):
def inner():
return“它工作了!”
返回内部
m=Magic()
#这些几乎是同义词
打印(m.u_urepr_uu())
打印(报告(m))
#这实际上是一个“绑定函数”——my_decorator
打印(m.\U报告)
测试
测试
应该提供对象的可读表示

返回包含对象的可打印表示形式的字符串

对于许多类型,此函数尝试返回一个字符串,该字符串将在传递给eval()时生成具有相同值的对象,否则,表示为尖括号中的字符串,其中包含对象类型的名称以及通常包括对象名称和地址在内的附加信息。类可以通过定义_repr__()方法来控制此函数为其实例返回的内容

您正在返回一个函数。 尝试:


关于
@属性
decorator,以及一般的decorator,也值得一读。。。看


要回答“实际何时调用internal()函数?”,请参见下文。当
repr()
代表您调用
Magic.\uu\repr\uuuu()
时,会调用它

#/usr/bin/env蟒蛇3
def my_decorator(信息):
定义my_dec_内部(自我):
返回“测试”
返回我的\u dec\u inner
课堂魔术:
@我的装饰师
定义报告(自我):
def inner():
return“它工作了!”
返回内部
m=Magic()
#这些几乎是同义词
打印(m.u_urepr_uu())
打印(报告(m))
#这实际上是一个“绑定函数”——my_decorator
打印(m.\U报告)
测试
测试

谢谢你,阿蒂。我现在明白了,谢谢你,阿蒂。我现在明白了。
>>> class Magic:
...     def __repr__(self):
...         def inner():
...             return "It works!"
...         return inner()
...
>>> repr(Magic())
'It works!'