gpt4 book ai didi

python - @dataclass Python 类中拼写错误的字段

转载 作者:行者123 更新时间:2023-12-05 09:14:37 24 4
gpt4 key购买 nike

如何让它在 @dataclass 修饰的 Python 类中设置拼写错误的字段时引发异常?

我想要一个实用的方法来做到这一点。我是否需要改为编写自己的装饰器?

@dataclass
class C(object):
x: int = 1

obj = C()
obj.y = 2 # should raise an exception

最佳答案

一种直接的方法(适用于任何类)是定义__slots__:

In [1]: from dataclasses import dataclass

In [2]: @dataclass
...: class Foo:
...: __slots__ = 'bar','baz'
...: bar: int
...: baz: int
...:

In [3]: foo = Foo(42, 88)

In [4]: foo.biz = 10
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-d52b60444257> in <module>()
----> 1 foo.biz = 10

AttributeError: 'Foo' object has no attribute 'biz'

插槽的目的是作为一个小的优化。它允许类的实例使用符号表而不是 dict 作为类的命名空间。它略微提高了属性访问的速度,并且可以显着提高每个实例的内存使用率(因为实例不携带 dict 在引擎盖下),但是,它不允许动态属性设置。

这实际上是 __slots__ 我最喜欢的功能

请注意,在对插槽使用继承时必须小心,至少,如果您希望子类保留插槽行为。

关于python - @dataclass Python 类中拼写错误的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53773722/

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