在为数据类中的字段初始化默认值时调用方法

Calling a method when initializing a default value for a field in a dataclass

为属性设置默认值时,我可以调用在 class 外部定义的函数,但不能调用其中定义的方法。

请参阅下面的示例。

进口:

from dataclasses import dataclass, field

call_that() 外部定义工作正常:

def call_that():
  return -1

@dataclass
class Foo:
  myvar : int = field(default_factory = call_that)

Foo()

returns "Foo(myvar=-1)"

但是call_this()里面定义了

@dataclass
class Foo:
  myvar : int = field(default_factory = call_this)
  def call_this():
    return 1

Foo()

returns "NameError: name 'call_this' is not defined"

您必须在分配或以其他方式使用之前定义“方法”:

@dataclass
class Foo:
  # method precedes its usage
  def call_this():
    return 1

  myvar : int = field(default_factory = call_this)

Foo()

请注意,这不是一个正确的方法,即使它是在 class 正文中定义的。它不(也不应该)采用 self 参数 - 它只能通过 class 有意义地使用,而不是任何实例。但是,它最终仍将作为每个实例的 public 接口的一部分。

考虑 del class 主体末尾的方法,或者只是使用外部函数,以避免污染您的 class' 界面。