Python 数据类:动态创建 属性
Python dataclass: create property dynamically
我有一个数据class,我想在评估另一个 属性 device_name 之后动态创建 属性 device_group。我目前正在使用 @属性 装饰器进行操作,如果我使用 instance.device_group .
访问它,它就会工作
@dataclass
class Device:
device_name: str
uplinks: list
@property
def device_group(self) -> str:
# do something here with self.device_name
return device_group
但是 class 实例不会有此 属性 除非您尝试使用 instance.device_group
访问它
"unknown_device": {
"device_name": "unknown_device",
"uplinks": [
{
实例是否可以在创建后立即动态生成 device_group?
或者我最好在其他地方调用 device_group() 然后将结果显式分配给 device_group 属性?
你可以使用 post init processing:
from dataclasses import dataclass, field
@dataclass
class Device:
device_name: str
uplinks: list
device_group = field(init=False)
def __post_init__(self):
self.device_group = self.device_name + "_group"
我有一个数据class,我想在评估另一个 属性 device_name 之后动态创建 属性 device_group。我目前正在使用 @属性 装饰器进行操作,如果我使用 instance.device_group .
访问它,它就会工作@dataclass
class Device:
device_name: str
uplinks: list
@property
def device_group(self) -> str:
# do something here with self.device_name
return device_group
但是 class 实例不会有此 属性 除非您尝试使用 instance.device_group
访问它 "unknown_device": {
"device_name": "unknown_device",
"uplinks": [
{
实例是否可以在创建后立即动态生成 device_group? 或者我最好在其他地方调用 device_group() 然后将结果显式分配给 device_group 属性?
你可以使用 post init processing:
from dataclasses import dataclass, field
@dataclass
class Device:
device_name: str
uplinks: list
device_group = field(init=False)
def __post_init__(self):
self.device_group = self.device_name + "_group"