我想使用 @dataclass 来删除很多样板,但我也喜欢 @property 提供的数据封装。我可以同时做这两件事吗?
作为一个玩具示例,我有一个类似的课程
class Breakfast:
def __init__(self, sausage: str, eggs: str = "Scrambled", coffee: bool = False):
self._sausage = sausage
self._eggs = eggs
self._coffee = coffee
@property
def sausage(self):
return self._sausage
@property
def eggs(self):
return self._eggs
@property
def coffee(self):
return self._coffee
def __repr__(self):
...
def __eq__(self):
...
Run Code Online (Sandbox Code Playgroud)
我可能还为某些属性设置了设置器。我想要的是以这样的形式写这个
@dataclass(property=True)
class DataBreakfast:
sausage: str
eggs: str = "Scrambled"
coffee: bool = False
Run Code Online (Sandbox Code Playgroud)
(当然,我的装饰器参数不起作用)它将执行 @dataclass 所做的所有例行工作,并且本质上输出第一个片段的代码。然后,我可以在闲暇时手动在类主体的其余部分添加设置器。
这似乎是一个足够常见的用例,但我无法找到让它发挥作用的方法。冻结参数最接近我想要的,但它的行为并不像@property,因为它排除了任何类型的设置器。