我真的很奇怪的问题。我写了一堂课,然后我想修改她一下。我改变了一些东西,现在:无法赋值给对象的属性
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