簡體   English   中英

python class 屬性作為實例構造函數默認參數

[英]python class attributes as instance constructor default parameters

我想使用 class 屬性作為實例構造函數的默認參數,但似乎 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

在構建 class 命名空間時, A不是名稱。 只需取消限定名稱( A.class_size -> class_size ):

class A:
    class_size = 4

    def __init__(self, size=class_size):
        self.size = size

警告

但是,上面沒有考慮 inheritance,如果您想覆蓋子類中的默認值。 為此,您只需要手動查找構造函數中的默認值:

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:
        # ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM