У меня действительно странная проблема. Я написал один класс, затем я хотел немного изменить ее. Я изменил несколько вещей и сейчас:Невозможно присвоить значение объекту объекта
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 работает только для других классов или только для других ключей? Я хочу, чтобы это просто установило положение, высоту и ширину на моем пути.
Обратите внимание, что два ведущих символа подчеркивания вызывают * «имя mangling» *, что делает все более сложным. Для атрибута private-by-convention достаточно одного подчеркивания. – jonrsharpe