Согласно документации Python 2.7.12, 3.4.2.3. Вызов Descriptors¶:Почему атрибуты атрибутов экземпляров не проверяются атрибутами metaclass?
поведение по умолчанию для доступа к атрибутам, чтобы получить, набор или удалить атрибут из словаря объекта. Например,
a.x
имеет поисковую цепочку, начиная сa.__dict__['x']
, затемtype(a).__dict__['x']
и продолжающуюся через базовые классыtype(a)
исключая метаклассами.
Но почему метаклассы исключены?
Если вы постоянно звоните type(self)
, независимо от того, какой объект self
является объектом экземпляра или объектом типа, вы в конечном итоге получите <type 'type'>
. Поэтому я не могу понять, почему метаклассы пользуются этой «привилегией».
Кстати, я немного смущен этой цитаты: Для объектов экземпляра, object.__getattribute__
используются, так что я думаю, что поиск цепь должна выглядеть следующим образом:
a.__dict__['x']
type(a).__dict__['x']
b.__dict__[x]
дляb
вtype(a).__mro__
type(b).__dict__[x]
длявtype(a).__mro__
c.__dict__[x]
дляc
вtype(b).__mro__
- ......
Я прав?
Я вижу, что вы экспериментируете с метаклассами и атрибутируете доступ - по какой-либо причине вы не uisng Python 3?Почти любой проект может использовать Python 3 сегодня, и у tehre есть много особенностей/изменений, которые не попали в Python2 – jsbueno
@jsbueno Хм ... Для совместимости, я думаю. Мой колледж (мой одноклассник, на самом деле. Мы вместе работаем над проектом.) Рекомендовал мне сначала изучить Python2, потому что многие модули еще не поддерживают Python3, и они могут не поддерживать его в ближайшем будущем. Мои эксперименты - это понимание того, как Python работает в фоновом режиме лучше, и они будут полезны, если я решит переключиться на Python3 когда-нибудь, верно? –
Я думаю, что «у многих модулей нет поддержки Python 3», это не так, как с 2015 года. Самые важные thngs nowadys действительно работают в Python3, и, прежде всего, для глубокого понимания, которое вы ищете, я бы сказал, что Python3 гораздо более уместен. Окончание линии Python s2 запланировано на 2020 год. Если вы начнете проект сегодня, то есть за 3 года до его переноса - я бы не сказал, что это того стоит. – jsbueno