Can I use a class attribute as a default value for an instance method?
我想使用类属性作为类的
1 2 3 4 | class MyClass(): __DefaultName = 'DefaultName' def __init__(self, name = MyClass.__DefaultName): self.name = name |
为什么失败了,有没有办法做到这一点?
这是因为,根据文件:
Default parameter values are evaluated when the function definition
is executed. This means that the
expression is evaluated once, when the
function is defined
当定义
1 2 3 4 | def __init__(self, name=None): if name is None: name = MyClass.__DefaultName # ... |
对于python,需要记住的一件重要的事情是,执行不同的代码位时,以及当看到
1 | def __init__( SELF, name = MyClass.__DefaultName ): |
当python看到
执行
1 | def __init__( SELF, name=__DefaultName ): |
记住,以后不能更改
1 | my_instance = MyClass(name='new name') |