Python 类为每次执行的@property 提供不同的输出
Posted
技术标签:
【中文标题】Python 类为每次执行的@property 提供不同的输出【英文标题】:Python Class gives different Output for @property Executed Each Time 【发布时间】:2021-03-05 04:24:21 【问题描述】:所以我使用带有@property
装饰器的 Python 类,但每次运行它的对象实例时都会给出不同的输出。
import random
generateID = lambda : random.randint(0, 99)
通过上面的函数,我创建了如下二类:
class A:
name = generateID()
obj = A()
for _ in range(3):
print(obj.name)
>> 79
>> 79
>> 79
class B:
@property
def name(self):
return generateID()
obj = B()
for _ in range(3):
print(obj.name)
>> 32
>> 94
>> 45
即使我使用random.seed
,每次我仍然得到不同的结果。这是预期的行为吗?我不明白。请解释!
【问题讨论】:
你告诉它返回一个随机整数。它返回一个随机整数。您是否期望它将第一个值保存在某个地方? 当一个对象被创建时,它应该用一个随机整数初始化,并且从那时起它应该保持不变,对吧?就像在A.name
中一样,但是对于B.name
,当我运行同一个对象时它是不同的。
“当一个对象被创建时,它应该用一个随机整数初始化”——这不是property
的意思。如果您希望在对象初始化时发生某些事情,请将其放入 __init__
。
property
代码发生在属性访问时。
【参考方案1】:
所以以前我在不知道python-decorators
的全部范围的情况下遇到了上述问题。因此,如果其他人像我一样被卡住,那么您可以在 YouTube 上查看本教程 - Corey Schafer 的“Python OOP Tutorial 6: Property Decorators - Getters, Setters, and Deleters”。
【讨论】:
以上是关于Python 类为每次执行的@property 提供不同的输出的主要内容,如果未能解决你的问题,请参考以下文章