将函数传递给数据类的 __post_init__ 方法

Pass a function into the __post_init__ method of dataclasses

我有一个数据class,我想在初始化 class 时设置一个值。

@dataclass
class classA:

    __data: DataFrame
    __Limit: float
    __totalLimit: float = field(init=False)


    def __post_init__(self):

        # This Does not work
        __setTotalLimit()

        # This works when i put the logic in.
        # self.__totalLimit = self.__data['Amount'].sum()

    def __setTotalLimit(self):
        self.__totalLimit = self.__data['Amount'].sum()

这是我收到的错误: NameError:名称“_classA__setTotalLimit”未定义

基本上一旦数据传入,我就需要汇总一列并将其设置为变量,因为它将在整个脚本中使用。

这样使用:

def __post_init__(self):
    self.__setTotalLimit()

如果该字段实际上不需要来自实例的数据,则根本不要使用 __post_init__,而是在添加字段本身时使用 default_factory 选项,提供零参数可调用。

请注意,__name_mangle 每个数据类字段都这样很奇怪。您可能应该只使用普通属性。

您忘记使用self引用方法:

def __post_init__(self):
    self.__setTotalLimit()