设置属性的默认值时,我可以调用在类外部定义的函数,但不能在其中定义的方法。
请参见下面的示例。
进口:
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'未定义”
答案 0 :(得分:1)
您必须先定义“方法”,然后才能分配或以其他方式使用它:
@dataclass
class Foo:
# method precedes its usage
def call_this():
return 1
myvar : int = field(default_factory = call_this)
Foo()
请注意,即使它是在类主体中定义的,这也不是正确的方法。它不(也不应该)采用self
参数-它只能在类中有意义地使用,而不能在任何实例中使用。但是,它仍将最终成为每个实例的公共接口的一部分。
请考虑在类正文末尾使用del
方法,或者只是使用外部函数,以避免污染类的接口。