【问题标题】:Pass a function into the __post_init__ method of dataclasses [duplicate]将函数传递给数据类的 __post_init__ 方法[重复]
【发布时间】:2020-05-12 18:48:24
【问题描述】:

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

@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: name '_classA__setTotalLimit' 未定义

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

【问题讨论】:

  • 为什么要修改数据类中的所有名称?
  • 您不是在尝试将函数传递__post_init__,而是在尝试从另一个方法调用方法。这与数据类无关

标签: python python-dataclasses


【解决方案1】:

你忘了参考使用self的方法:

def __post_init__(self):
    self.__setTotalLimit()

【讨论】:

    【解决方案2】:

    这样使用:

    def __post_init__(self):
        self.__setTotalLimit()
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多