【问题标题】:Python Class gives different Output for @property Executed Each TimePython 类为每次执行的@property 提供不同的输出
【发布时间】: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


【解决方案1】:

所以以前我在不知道python-decorators 的全部范围的情况下遇到了上述问题。因此,如果其他人像我一样被卡住,那么您可以在 YouTube 上查看本教程 - Corey Schafer 的“Python OOP Tutorial 6: Property Decorators - Getters, Setters, and Deleters”。

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2017-07-25
    • 2021-12-05
    • 2023-04-07
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多