Предупреждение: это не производственный код реального использования, это просто попытка углубиться во внутреннюю структуру Python!
Скажем, у меня есть такой (слегка PHP стиль) класс в моем Python код:
class Person:
_age: int
def __init__(self, age): self.setAge(age)
def getAge(self): return self._age
def setAge(self, age): self._age = age
def hello(self): print(f"Hello, I'm {self.getAge()}")
Теперь я создаю несколько объектов Person:
tom = Person(20)
betty = Person(22)
john = Person(30)
john.hello() # output: "Hello, I'm 30"
Теперь давайте предположим, что у Джона есть некоторые причины, чтобы скрыть свой реальный возраст, поэтому мы делаем грязную уловку с помощью перезагрузка его getAge:
john.getAge = lambda: john._age - 5
john.hello() # output: "Hello, I'm 25"
У нас есть несколько способов сделать это, если Person объявлен более Pythoni c способом с использованием @property?
class Person:
_age: int
def __init__(self, age): self._age = age
@property
def age(self): return self._age
@age.setter
def age(self, x): self._age = x
def hello(self): print(f"Hello, I'm {self.age}")