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 提供不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bash 修复 Python 库的 PATH

将 aws 可执行文件添加到操作系统的 PATH 环境变量中:每次都需要吗? [复制]

怎么在python脚本中调用其它的python脚本运行?

Java枚举类型在RPC调用时由于版本不一致遇见的问题

linux下执行Python项目,crontab不能定时执行任务

找不到 Python 可执行文件“/path/to/executable/python2.7”,可以设置 PYTHON env 变量