考虑以下数据类。我想防止使用__init__
方法直接创建对象。
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class C:
a: int
@classmethod
def create_from_f1(cls, a: int) -> C:
# do something
return cls(a)
@classmethod
def create_from_f2(cls, a: int, b: int) -> C:
# do something
return cls(a+b)
# more constructors follow
c0 = C.create_from_f1(1) # ok
c1 = C() # should raise an exception
c2 = C(1) # should raise an exception
例如,我想强制使用我定义的其他构造函数,如果直接将对象创建为c = C(..)
.
到目前为止,我已经尝试过如下。
@dataclass
class C:
a : int = field(init=False)
@classmethod
def create_from(cls, a: int) -> C:
# do something
c = cls()
c.a = a
return c
with init=False
in field
I 防止a
成为生成的参数__init__
,因此这部分解决了c = C(1)
引发异常的问题。
另外,我不喜欢它作为解决方案。
有没有直接的方法来禁止从类外部调用init方法?