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
Комментариев нет:
Отправить комментарий