enk*_*tor 3 python slots python-dataclasses
此代码按预期工作:
from dataclasses import dataclass
@dataclass(slots=False, init=False)
class Test:
field: str = "default value"
print(Test()) # outputs "Test(field='default value')"
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改slots为True,它会抛出 AttributeError:
AttributeError: 'Test' object has no attribute 'field'
Run Code Online (Sandbox Code Playgroud)
要解决此问题,我必须使用生成的__init__方法或显式初始化自定义方法中的所有字段__init__。这种行为背后的原因是什么?
无论如何,您都没有使用默认值初始化对象 - 您__init__根本没有初始化对象。但是,如果没有,它看起来__slots__就像存在默认值,因为实例属性查找回退到类,并发现类上设置为。field"default value"
有了slots=True,field班级就不再设置了"default value"。它被设置为一个槽描述符,负责从实例内存布局的右侧部分检索槽值。实例属性查找找到槽描述符,它检查实例内存布局中的槽,发现槽是空的,因此它引发一个AttributeError.
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |