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

时间:2019-09-14 04:49:21

标签: python python-dataclasses

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

请参见下面的示例。

进口:

from dataclasses import dataclass, field

call_that()在外部定义的效果很好:

def call_that():
  return -1

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

Foo()

返回“ Foo(myvar = -1)”

但是call_this()是在内部定义的

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

Foo()

返回“ NameError:名称'call_this'未定义”

1 个答案:

答案 0 :(得分:1)

您必须先定义“方法”,然后才能分配或以其他方式使用它:

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

  myvar : int = field(default_factory = call_this)

Foo()

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

请考虑在类正文末尾使用del方法,或者只是使用外部函数,以避免污染类的接口。