Стилистически размещение определений функций в определении класса, которые не являются методами, неуместно (хотя это может быть даже не пифонично). Flat лучше, чем вложенный , поэтому, вероятно, лучше объявить функцию вне класса. Таким образом, когда читатель смотрит на ваш класс, не возникнет путаницы, почему существует метод , который не принимает self
в качестве аргумента (поскольку функция объявляется как метод, когда это просто декоратор, хотя это немного отличается, если функция @staticmethod
).
Если вас беспокоит, что он будет использоваться вне класса, добавьте к нему префикс _
, и тогда from my_package import *
не будет импортировать его. Он все еще может использоваться в этом модуле, но он не будет использоваться снаружи, если явно не импортирован.
Практически автор имеет в виду случайное странное поведение области видимости (похожее на дебаты в Javascript о том, использовать ли function() { ...
или () => { ...
в зависимости от того, как обстоят дела). Если вы неосторожны и случайно Если логика включает self
не в той части декоратора, у вас могут возникнуть проблемы с областью видимости.
Единственные преимущества, которые я вижу в использовании функций внутри классов, возможно, заключаются в том, что они ближе к методам (но это влечет за собой ненужное вложение, потенциальные проблемы с областями видимости и когнитивную нагрузку от понимания, что это декоратор, а не метод), и лучше скрыть функцию, если ее имя начинается с _
или __
.
TL; DR Стилистические / Pythonicity проблемы и потенциальные проблемы объема.