Инициализация / объявление атрибутов в классе Python: где их разместить?
Мне было интересно, как лучше всего инициализировать атрибуты объекта в Python, в теле класса или внутри __init__
функционировать?
т.е.
class A(object):
foo = None
против
class A(object):
def __init__(self):
self.foo = None
2 ответа
Если вы хотите, чтобы атрибут был общим для всех экземпляров класса, используйте атрибут класса:
class A(object):
foo = None
Это вызывает ('foo',None)
быть (key,value)
пара в A.__dict__
,
Если вы хотите, чтобы атрибут был настраиваемым для каждого экземпляра, используйте атрибут экземпляра:
class A(object):
def __init__(self):
self.foo = None
Это вызывает ('foo',None)
быть (key,value)
пара в a.__dict__
где a=A()
это пример A
,
Атрибуты, определенные в определении класса, считаются переменными класса (как статические переменные в Java), тогда как атрибуты, установленные в инициализаторе, являются атрибутами экземпляра (обратите внимание на разницу между self.something = 1
а также something = 1
). Смотрите этот вопрос для более подробной информации, а этот для еще большего. Между этими двумя случаями нет большой практической разницы, так как определение на уровне класса дает атрибуту значение по умолчанию, но если вы хотите использовать какую-то логику для установки атрибута перед использованием экземпляра объекта, вы должны сделать это в __init__()
метод.