【发布时间】: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代码发生在属性访问时。
标签: python oop python-decorators python-class