Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

В чем отличие в присвоении атрибута класса в конструкторе и нет

class W: a = 1
или
class W(): def __init__(self): self.a = 1
В чем отличие? И какие фишки есть с каждым вариантом?


Ответ

В первом случае переменная a является атрибутом класса, и доступна и как W.a и как:
w = W() w.a
Во втором же случае переменная создаётся в момент инициализации объекта, а значит принадлежит объекту и доступна только как:
w = W() w.a
Основная разница заключается в том, как распределяется память. В первом случае память на хранение данной переменной выделяется при объявлении класса, во втором же случае память выделяется для каждого из объектов класса. Используется и то и другое, всё зависит от задачи.
Из фишек - можно например изменять значение сразу для всех объектов класса:
class A(): b = 1 a = A() b = A()
a.b # результат 1 b.b # результат 1 # Когда меняем значение для члена класса A.b = 5 # Оно изменяется для всех объектов класса b.b # результат 5 a.b # результат 5

Комментариев нет:

Отправить комментарий