gpt4 book ai didi

python - 如何在 Python 中为实例分配属性?

转载 作者:太空狗 更新时间:2023-10-30 00:51:58 24 4
gpt4 key购买 nike

使用 python,可以通过以下两种方法之一设置实例的属性:

>>> class Foo(object):
pass

>>> a = Foo()
>>> a.x = 1
>>> a.x
1
>>> setattr(a, 'b', 2)
>>> a.b
2

也可以通过属性装饰器分配属性。

>>> class Bar(object):
@property
def x(self):
return 0


>>> a = Bar()
>>> a.x
0

我的问题是,如何为实例分配属性?

我的直觉是尝试这样的事情......

>>> class Doo(object):
pass

>>> a = Doo()
>>> def k():
return 0

>>> a.m = property(k)
>>> a.m
<property object at 0x0380F540>

...但是,我得到了这个奇怪的属性对象。类似的实验产生了类似的结果。我的猜测是,在某些方面,属性与类的关系比与实例的关系更密切,但我不太了解内部工作原理,无法理解这里发生了什么。

最佳答案

可以在类创建后动态添加属性:

class Bar(object):
def x(self):
return 0

setattr(Bar, 'x', property(Bar.x))

print Bar.x
# <property object at 0x04D37270>
print Bar().x
# 0

但是,您不能在实例上设置属性,只能在类上设置。您可以使用实例来执行此操作:

class Bar(object):
def x(self):
return 0

bar = Bar()

setattr(bar.__class__, 'x', property(bar.__class__.x))

print Bar.x
# <property object at 0x04D306F0>
print bar.x
# 0

参见 How to add property to a class dynamically?获取更多信息。

关于python - 如何在 Python 中为实例分配属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com