Инициализация / объявление атрибутов в классе Python: куда их поместить?

Мне было интересно, что было наилучшей практикой для инициализации атрибутов объектов в Python, в теле класса или внутри функции __init__ ?

т.е.

 class A(object): foo = None 

против

 class A(object): def __init__(self): self.foo = None 

    2 Solutions collect form web for “Инициализация / объявление атрибутов в классе Python: куда их поместить?”

    Если вы хотите, чтобы атрибут был общим для всех экземпляров класса, используйте атрибут class:

     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__() .

    Python - лучший язык программирования в мире.