簡體   English   中英

Python中的私有類變量?

[英]Private Class Variables in Python?

我希望能夠擴展一個類而不繼承其中一個類變量。

鑒於這種情況:

class A:
    aliases=['a','ay']

class B(A):
    pass

print(B.aliases)

我寧願得到一個錯誤,B沒有定義aliases變量而不是B意外地稱為ay

可以想象一個解決方案,其中別名成為實例化對象的成員( self.aliases )並在__init__設置但我真的希望能夠使用cls對象而不是類的實例來訪問別名。

有什么建議?

Python沒有REALY私有屬性。 但您可以使用雙下划線( __ )來定義它:

class A:
    __aliases=['a','ay']

class B(A):
    pass

print(B.__aliases) # yields AttributeError

但您仍然可以使用以下方式訪問它:

print(B._A__aliases)

這是一個很有意思的工作,但是你走了:

class K:
    def __init__(self):
        self.mems = dir(self)

def defaultMembers():
    k = K()
    return(k.mems)

class A:
    aliases=['a','ay']

class B(A):
    def __init__(self):
        for k in set(dir(self))-set(defaultMembers()):
            print("removing "+k)
            setattr(self, k, None)

a = A()
b = B()
print(b.aliases)
#None
print(a.aliases)
#['a','ay']

我猜你真正需要的是setattr(self, "aliases", None)仍然會導致None而不是非變量。 不幸的是,calsses不支持刪除,因為我試圖先使用del。

暫無
暫無

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

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