我想使用类属性作为实例构造函数的默认参数,但似乎python不支持它。有人可以解释为什么或更正下面的代码以便它可以工作吗?
好的,但从我的角度来看不够明确
class B:
class_size = 4
def __init__(self):
self.size = B.class_size
我想要的(不起作用(
class A:
class_size = 4
def __init__(self,size = A.a_size):
self.size = size
使用上面的声明python抱怨:
def __init__(self,size = A.a_size): NameError: name 'A' is not defined
在构建类命名空间时A
不是名称。只需取消限定名称 (A.class_size
->class_size
(:
class A:
class_size = 4
def __init__(self, size=class_size):
self.size = size
警告
但是,如果要覆盖子类中的默认值,则上述内容不考虑继承。为此,您只需在构造函数中手动查找默认值:
class A:
default_size = 4
def __init__(self, size=None):
if size is None:
size = self.default_size
self.size = size
class B(A):
default_size = 15
print(A().size)
print(B().size)
print(B("yes").size)
输出
4
15
yes
如果None
是参数的有效值,则可以改为选择哨兵值:
NOTSET = object()
# ...
def __init__(self, size=NOTSET):
if size is NOTSET:
# ...