[英]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.