0ralo
@0ralo
Python backend developer

ООП сработало не правильно?

Здравствуйте, за ранее извиняюсь если мой косяк. Но я думал что понимаю ООП, однако что-то для меня не логично
class Test:
	a: list = []
	
>>>f = Test()
>>>f.a
[] # Логично
>>>f.a.append(3)
>>>f.a
[3] # Логично
>>>f = Test()
>>>f.a
[3] #Какого черта

В предпоследней строке у меня f.a равно 3, но откуда? Я строкой выше создал новый экземпляр класса, почему там 3 а не дефолтное значение ([]). Так работает только с .append(). Если напрямую задавать, то работает предсказуемо
Python3.10
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ты в питон из какого языка пришёл? =)
class Test:
  a: list = []

Ты объявил атрибут класса, а не экземпляра класса.
Так как у экземпляра класса нет атрибута a, питон ищет этот атрибут в самом классе - и находит.
У тебя в примере и Test.a тоже даст [3].

Атрибут экземпляра класса в питоне объявляется вот так:
class Test:
    def __init__(self):  # конструктор
        self.a: list = []

Тут у каждого экземпляра будет своя копия списка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы