提问人:roulette01 提问时间:8/30/2023 最后编辑:roulette01 更新时间:8/30/2023 访问量:92
什么是python中的“属性的动态赋值”?
What is "dynamic assignment of an attribute" in python?
问:
我很少使用 Python,所以也许我只是不知道一些措辞。在今天的一次演讲中,有人说他们希望避免“属性的动态分配”,但没有提供示例。
我知道动态创建类的属性意味着什么,但是动态赋值是什么意思?这似乎意味着 python 中有静态赋值,但 python 是一种动态类型语言。
答:
3赞
juanpa.arrivillaga
8/30/2023
#1
通常,这意味着属性本身是动态创建的字符串,然后分配给实例:
class Foo:
... pass
...
>>> foo = Foo()
>>> attr = "some_dynamically_created_string"
>>> setattr(foo, attr, 42)
>>> foo.some_dynamically_created_string
42
评论
0赞
roulette01
8/30/2023
哦,嗯,我以为他们只意味着赋值部分,并且已经创建了属性。在您的示例中,是否从未在实际的类定义中显示?如果他们只是在类定义之外创建这样的属性,这似乎很难理解attr
Foo
0赞
juanpa.arrivillaga
8/30/2023
@roulette01听起来像是应该避免它们的一个很好的理由!请注意,在 Python 中,如果没有赋值,则无法创建属性...属性只有在首次被赋值时才会存在!
评论
setattr(cake, f'{ingr}{id}', 7)
cake.eggs = 7
__init__
python is a dynamically typed language
不,最流行的实现 (CPython) 的“语言默认值”允许动态行为。您可以使用 Python(甚至 CPython)作为静态类型语言;例如,添加到基类将防止将任意命名的属性添加到实例中,并且使用 mypy 和 pyright 的静态类型现在非常普遍(至少在开源社区中)。__slots__
__slots__