这是因为,根据文档:
执行功能定义时将评估默认参数值。 这意味着在定义函数时,表达式将被计算一次
当
__init__()定义了时,的定义
MyClass是不完整的,因为它仍在解析中,因此您还不能参考
MyClass.__DefaultName。解决该问题的一种方法是将一个特殊的唯一值传递给
__init__(),例如
None:
def __init__(self, name=None): if name is None: name = MyClass.__DefaultName # ...

这是因为,根据文档:
执行功能定义时将评估默认参数值。 这意味着在定义函数时,表达式将被计算一次
当
__init__()定义了时,的定义
MyClass是不完整的,因为它仍在解析中,因此您还不能参考
MyClass.__DefaultName。解决该问题的一种方法是将一个特殊的唯一值传递给
__init__(),例如
None:
def __init__(self, name=None): if name is None: name = MyClass.__DefaultName # ...