Почему нам нужно указывать self в конструкторе __init__, когда экземпляр еще не создан?

raptor0102 спросил: 07 октября 2018 в 10:39 в: python

При выполнении следующего кода:

class Test():
    def __init__(self):
        self.hi_there()
        self.a = 5
    def hi_there(self):
        print(self.a)new_object = Test()
new_object.hi_there()

я получил ошибку:

Traceback (most recent call last):
  File "/root/a.py", line 241, in <module>
    new_object = Test()
  File "/root/a.py", line 233, in __init__
    self.hello()
  File "/root/a.py", line 238, in hello
    print(self.a)
AttributeError: 'Test' object has no attribute 'a'

Почему нам нужно указать self внутри функции, пока объект еще не инициализирован? Возможность вызова функции hi_there() означает, что объект уже установлен, но как получится, если другие переменные, относящиеся к этим экземплярам, ​​еще не были инициализированы? Что такое self внутри , если это еще не "полный" объект?

Очевидно, эта часть кода работает:

class Test():
    def __init__(self):
        #self.hi_there()
         self.a = 5
         self.hi_there()    def hi_there(self):
       print(self.a)new_object = Test()
new_object.hi_there()

Я из мира C ++ , там вы должны объявить переменные, прежде чем назначать их. Я полностью понимаю ваше использование __init__. Хотя я не понимаю, для чего нужен self внутри self, если объект __init__() не полностью инициализирован.

0 ответов