Невозможно понять, как работают объекты в Python - PullRequest
0 голосов
/ 14 января 2020

Я изучаю Python и заметил эту программу.

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.printInfo = self.name + " is " + self.age + " years old!"

jack = Person("Jack", "30")
print(jack.name)
print(jack.age)
print(jack.printInfo)

jack.name = "Abel"
print(jack.name)
print(jack.printInfo)

Почему в последнем операторе печати вместо Авеля печатается "Джек"?

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Как упоминалось ранее, self.printInfo инициализируется в __init__, поэтому изменение self.name не изменит его. Если вы хотите динамическое c Person представление, вы можете переопределить __str__

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return self.name + " is " + self.age + " years old!"


jack = Person("Jack", "30")
print(jack.name)
print(jack.age)
print(jack) # Jack is 30 years old!

jack.name = "Abel"
jack.age = "25"
print(jack.name)
print(jack) # Abel is 25 years old!
1 голос
/ 14 января 2020

Когда вы создаете экземпляр объекта jack, он создает self.printInfo в инициализаторе. Он устанавливает self.printInfo = self.name + " is " + self.age + " years old!", т.е. self.printInfo = Jack is 30 years old!.

Это постоянное значение. Он не меняется при изменении self.name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...