datacalasses的Python3默认值不能与属性一起使用
为什么属性对我不起作用,当我没有指定procent时,它会抛出一个异常(可能是bug吗?)?或者是我在数据类中缺少的东西datacalasses的Python3默认值不能与属性一起使用,python,python-3.7,Python,Python 3.7,为什么属性对我不起作用,当我没有指定procent时,它会抛出一个异常(可能是bug吗?)?或者是我在数据类中缺少的东西 from dataclasses import dataclass, field @dataclass class A(object): index: int #procent: float = 1.0 procent: float = field(default=1.0) def __post_init__(self): s
from dataclasses import dataclass, field
@dataclass
class A(object):
index: int
#procent: float = 1.0
procent: float = field(default=1.0)
def __post_init__(self):
self.row, self.col = divmod(self.index, 13) # Row, Column
@dataclass
class B(object):
index: int
#procent: float = 1.0
procent: float = field(default=1.0)
def __post_init__(self):
self.row, self.col = divmod(self.index, 13) # Row, Column
@property
def procent(self):
return self._procent
@procent.setter
def procent(self, x: float, base: float = 5):
self._procent = float(base * round(x * 100 / base) / 100)
print(A(index=1, procent=0.33))
# A(index=1, procent=0.33)
print(A(1))
# A(index=1, procent=1.0)
print(B(1, 0.33))
# B(index=1, procent=1.35)
B(1) # Explodes here
# self._procent = float(base * round(x * 100 / base) / 100)
#TypeError: unsupported operand type(s) for *: 'property' and 'int'
由于将值存储在
self.\u-procent
中,因此还应将字段命名为\u-procent
_procent: float = field(default=1.0)
在完整示例的上下文中:
from dataclasses import dataclass, field
@dataclass
class B(object):
index: int
_procent: float = field(default=1.0)
def __post_init__(self):
self.row, self.col = divmod(self.index, 13) # Row, Column
@property
def procent(self):
return self._procent
@procent.setter
def procent(self, x: float, base: float = 5):
self._procent = float(base * round(x * 100 / base) / 100)
print(B(1))
输出
B(index=1, _procent=1.0)