在为数据类中的字段初始化默认值时调用方法
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' 界面。
为属性设置默认值时,我可以调用在 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' 界面。