Ore*_*lom 7 python attributes attr
我的 python 数据类需要一个唯一的(无符号整数)id。这与so post非常相似,但没有明确的演员。
import attr
from attrs import field
from itertools import count
@attr.s(auto_attribs=True)
class Person:
#: each Person has a unique id
_counter: count[int] = field(init=False, default=count())
_unique_id: int = field(init=False)
@_unique_id.default
def _initialize_unique_id(self) -> int:
return next(self._counter)
Run Code Online (Sandbox Code Playgroud)
还有更多“pythonic”解决方案吗?
Mis*_*agi 13
使用默认工厂而不仅仅是默认工厂。这允许定义一个调用来获取每个实例化的下一个 id。
获得可累加的可调用对象的一个简单方法是使用count().__next__,相当于调用next(...)实例count。1
常见的“无显式构造函数”库attr都dataclasses支持这一点:
from itertools import count
from dataclasses import dataclass, field
@dataclass
class C:
identifier: int = field(default_factory=count().__next__)
import attr
@attr.s
class C:
identifier: int = attr.field(factory=count().__next__)
Run Code Online (Sandbox Code Playgroud)
要始终使用自动生成的值并防止将其作为参数传递,请使用init=False。
@dataclass
class C:
identifier: int = field(default_factory=count().__next__, init=False)
Run Code Online (Sandbox Code Playgroud)
1如果想避免显式寻址魔术方法,可以在count. 例如,factory=lambda counter=count(): next(counter)。
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |