Перед.
Метод __init__
не запускается, пока не будет создан экземпляр Foo
.i=1
запускается всякий раз, когда определение класса встречается в коде
Это можно увидеть, добавив операторы print:
print('Before Foo')
class Foo:
i = 1
print(f'Foo.i is now {i}')
def __init__(self):
print('Inside __init__')
self.i += 1
print(f'i is now {self.i})
print('After Foo')
print('Before __init__')
foo = Foo()
print('After __init__')
, которые выводят:
Before Foo
Foo.i is now 1
After Foo
Before __init__
Inside __init__
i is now 2
After __init__
Обратите внимание, что ваш self.i += 1
не изменяет атрибут класса Foo.i
.
foo.i # This is 2
Foo.i # This is 1