1
python | @dataclass
source link: https://benpaodewoniu.github.io/2022/12/12/python183/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
借助这个装饰器可以少写不少东西。
class A:
name = ""
age = 12
def __init__(self, name, age):
pass
正常来说,你创建一个 class
都需要自己写 init
,这个比较麻烦,借助 @dataclass
from dataclasses import dataclass
@dataclass
class A:
name = ""
age = 12
@dataclass
相当于直接给你写好了 init
。
第一个例子是最常见的用法。
field
如果有一个属性是 list
的话。
@dataclass
class A:
names: List[str] = list
如果执行下面的代码
a = A()
a.names.append("123")
print(a)
则会报错。
但是,把上面的代码换成
from dataclasses import dataclass, field
from typing import List
@dataclass
class B:
names: List[str] = field(default_factory=list)
就正常了。
from dataclasses import dataclass, field
from typing import List
@dataclass
class A:
names: List[str] = list
@dataclass
class B(A):
name: str = ""
name_A: A = field(default_factory=A)
names: List[str] = field(default_factory=list)
if __name__ == '__main__':
t = {
"name": "1",
"name_A": {
"names": ["5", "6"]
},
"names": ["2", "3"]
}
b = B(**(t))
print(b)
b
的结构如下
可以看到 name_A
并没有还原到 A
对象。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK