В процессе обучения Python, я наткнулся на это странное поведение:Доступ к частным переменная класса
Рассмотрим этот простой класс:
class Human(object):
def __init__(self, name):
self.__name = name
def description(self):
print("Hello, my name is %s" % self.__name)
Я хочу, чтобы избежать возможности изменить имя после того, как объект был создан ,
Если я использую это:
MyHuman = Human("Andy")
MyHuman.__name = "Arthur"
MyHuman.age = 23
MyHuman.description()
print MyHuman.age
Это не меняет название после того, как объект при создании экземпляра, который хорош, потому что я хочу, переменную экземпляра, чтобы быть частными. С другой стороны, я думал, что он будет жаловаться на доступ к этой переменной. Он даже не жалуется на доступ к таинственной переменной «возраст» и печатает ее позже.
Я родом из C#, и мне кажется странным. Где моя ошибка?
Ваша ошибка заключалась в том, что в Python есть частные переменные. Ближайшая эмуляция конфиденциальности - «не обращать внимания на эту переменную за занавеской». Если кто-то действительно хочет заглянуть за занавеску, это зависит от них. Официальная фраза - «соглашающиеся взрослые». – TigerhawkT3
Вот некоторые [документация] (https://docs.python.org/3.4/tutorial/classes.html#python-scopes-and-namespaces) о объектах и областях Python. – TigerhawkT3
Хорошо, но как насчет переменной «возраст»? Это немного запутанно, что вы можете создать переменную «на лету» (например, если бы я просто сделал опечатку), не так ли? –