Python的类 §
格式化输出类内的数据内容 §
def __repr__(self):
return "Prop 1: " + str(self.prop1)+", Prop 2: "+str(self.prop2)
构建数据类型(使用dataclass) §
使用dataclass创建复合数据类型 §
- 引用
dataclasses的dataclass和field
- list、dict等类型需要使用
default_factory初始化
from dataclasses import dataclass, field
@dataclass
class TestType:
str_type: str = None
np_type: np.ndarray = None
value_type: float = None
list_type: list = field(default_factory=lambda: [False]*6)
数据类型的嵌套 §
- 如果为多层嵌套,其内部所嵌套的每层声明应当用
field进行初始化,否则会导致声明指向同一变量(Python stores default member variable values in class attributes.), 参考
from dataclasses import dataclass, field
## inner most data
@dataclass
class Lv0:
x: float=0
## the structure in the middle
@dataclass
class Lv1:
y0: Lv0 = field(default_factory=lambda: Lv0()) # not y0: Lv0 = Lv0()
## outer most data
@dataclass
class Lv2:
z0: Lv1 = field(default_factory=lambda: Lv1())
if __name__ == '__main__':
a = Lv2()
b = Lv2()
a.z0.y0.x = 1
b.z0.y0.x = 2
print(a.z0.y0.x) ## get 1
print(b.z0.y0.x) ## get 2
- 错误示例,
a和b的.z0.y0指向了同一变量,输出为2和2
from dataclasses import dataclass, field
@dataclass
class Lv0:
x: float=0
@dataclass
class Lv1:
y0: Lv0 = Lv0()
@dataclass
class Lv2:
z0: Lv1 = field(default_factory=lambda: Lv1())
if __name__ == '__main__':
a = Lv2()
b = Lv2()
a.z0.y0.x = 1
b.z0.y0.x = 2
print(a.z0.y0.x) ## get 2
print(b.z0.y0.x) ## get 2