дальнейшее повторение советов Майка и Алекса и добавление моего собственного цвета ...
с использованием атрибутов экземпляра - это типичный, более идиоматичный Python.Атрибуты класса не часто используются - по крайней мере, не в производственном коде в мои последние 13+ лет Python.то же самое верно для статических и классовых методов ... просто не очень распространено, если только нет конкретного случая использования или аберрантный программист, желающий похвастаться, знает какой-то неясный угол программирования на Python.
Алекс упоминает в своем ответеэтот доступ будет (немного) быстрее из-за одного меньшего уровня поиска ... позвольте мне уточнить для тех, кто еще не знает, как это работает, он очень похож на переменный доступ - поиск происходит вэтот порядок:
- локальные
- нелокальные
- глобальные
- встроенные
для доступа к атрибутам,Порядок:
- экземпляр
- класс
- базовых классов, как определено MRO (порядок разрешения методов)
в вашем примеревыше, скажем, вы ищете атрибут path
.когда он встречает ссылку типа "self.path
", Python сначала проверяет соответствие атрибутов экземпляра;когда это терпит неудачу, он проверяет класс, из которого был создан объект.наконец, он будет искать базовые классы.как сказал alex, если ваш атрибут найден в экземпляре, он не будет зависеть от класса, а значит, сэкономит немного времени.
однако, если вы настаиваете на атрибутах класса, вам придетсяОткажитесь от этой крошечной производительности, или , другой альтернативой является обращение к объекту через класс вместо экземпляра, например, MyController.path
вместо self.path
.это прямой поиск, который поможет обойти отложенный поиск, но, как упоминает Алекс, это глобальная переменная, поэтому вы теряете тот бит, который, как вы думали, вы собираетесь сохранить (если вы не создадите локальную ссылку на имя класса [global]).