Python 类属性作为实例构造函数的默认参数



我想使用类属性作为实例构造函数的默认参数,但似乎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:
# ...

最新更新