我真的很奇怪的問題。我寫了一堂課,然後我想修改她一下。我改變了一些東西,現在:無法賦值給對象的屬性
class Window (Drawable):
__width = 0
def __init__(self, intext="", intitle="", inwidth=50, inheight=10, startpos=Position()):
self.__width = inwidth
print inwidth
print self.__width
我正在使用此代碼來呈現我的問題。每當我使用這個類創建一個對象時,它會打印50,然後打印0.這很奇怪,因爲我在那裏做的是我想要的一種改變這個值的基本方法。 我做錯了什麼?
有一段時間我認爲這是由於該代碼
def __setattr__(self, key, value):
if key == "position" or key == "width" or key == "height":
if key == "position":
self.__position = value
if key == "width":
self.__width = value
if key == "height":
self.__height = value
self.__get_shape()
但我評論它,並沒有什麼改變。 然後我想這是因爲變量不能用下劃線命名,但這也不是真的。 我完全沒有想法,真的。
編輯: 現在我找到了原因。就像我想的那樣,setattr - 父類也使用其中之一。有什麼辦法可以讓settattr只適用於其他類,或只適用於其他鍵?我希望它能夠以我的方式設置位置,高度和寬度。
請注意,兩個主要的下劃線調用*「name mangling」*,這會使一切變得更加複雜。對於按約定的私有屬性,單個前導下劃線就足夠了。 – jonrsharpe