Инициализация / объявление атрибутов в классе 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__() .

     
    Interesting Posts for Van-Lav

    Чтение / запись файлов из hdfs с использованием python с подпроцессом, Pipe, Popen дает ошибку

    Python 3 – не копирующий интерфейс потока для bytearray?

    Как повторить что-то на исключение в python?

    Динамически обновляемый сюжет в matplotlib

    Более питонический способ написать этот блок (и исключить: ValueError: элемент последовательности обновления словаря # 0 имеет длину 1, 2 требуется)

    ошибка памяти в python

    Преобразование целого в шестнадцатеричную строку с определенным форматом

    Как внедрены Inf и NaN?

    Перезапись скрипта pymc для оценки параметров в динамических системах в pymc3

    Какие проблемы (если они есть) были бы объединены asyncio с многопроцессорной обработкой?

    Какой самый быстрый способ увеличить контрастность цветного изображения с OpenCV в python (cv2)?

    Проблема с переменной областью в рекурсивной функции

    Методы python pack () и grid () вместе

    Быстрый способ расширения набора, если мы знаем, что элементы уникальны

    Расстояние Жаккар – объединение и пересечение списков

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