TL; DR: В определенных c описываемых вами случаях это не имеет значения. Это очень маленький компромисс между скоростью и безопасностью против будущих изменений, но нет правильного ответа.
Если нет аргумента массива до того, как он сохранен в атрибуте, тогда это не имеет значения. Использование неквалифицированного имени будет немного быстрее (self.name
на CPython подразумевает дешевое LOAD_FAST
и значительно более дорогое, хотя все еще дешевое в абсолютном выражении, LOAD_ATTR
; обычное name
для аргумента: просто LOAD_FAST
), поэтому, если вы 100% уверены, что никогда не собираетесь массировать аргумент перед хранением (например, не self.name = int(name)
), избегая self
, когда вы можете, ускорит инициализацию немного.
Тем не менее, это редко, чтобы быть уверенным, поэтому использование self.name
безопаснее. Хотя вы всегда можете разделить разницу, даже когда массируете аргументы, выполнив что-то вроде:
self.name = name = int(name)
, который сохраняет обратно как атрибут, так и локальный (через DUP_TOP
и STORE_FAST
, два из самых дешевых коды операций в CPython), так что вы получаете одинаковое массируемое значение любым способом и дешевые грузы из неквалифицированного имени.