小编Sci*_*ake的帖子

组合@dataclass和@property

我想使用 @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,因为它排除了任何类型的设置器。

python properties python-dataclasses

5
推荐指数
0
解决办法
2203
查看次数

标签 统计

properties ×1

python ×1

python-dataclasses ×1