6

这是我在 python 3.6 中的代码

class A(object)

    def __init__(self, a: str):
        self._int_a: int = int(a)  # desired composition

    def get_int_a(self) -> int:
        return self._int_a   

我想重写这段代码python 3.7,如何self._int_a: int = int(a)dataclasses模块初始化?

我知道我可以做类似的事情,但我不知道如何初始化_a: int = int(a)或类似的事情。

from dataclasses import dataclass


@dataclass
class A(object):
    _a: int = int(a)  # i want to get initialized `int` object here

def get_int_a(self) -> int:
    return self._a

提前感谢您的想法和建议。

4

1 回答 1

13

完全取消 getter 和 setter,只使用属性访问。我们可以定义一个只接受字符串的初始化字段__post_init__,然后在我们的调用中将该字符串转换为整数字段。

from dataclasses import dataclass, InitVar, field

@dataclass
class A:
    temp: InitVar[str]
    a: int = field(init=False)
    def __post_init__(self, temp):
        self.a = int(temp)

x = A("1")
print(type(x.a), x.a)
# <class 'int'> 1
于 2018-07-12T19:32:36.403 回答