Когда я говорю «процесс поиска атрибутов python», я имею в виду :, что делает python, когда вы пишете x.foo??
Поискав в Интернете, я не нашел много документов по этому поводу, одна из лучших статей, которые я нашел, возобновила процесс до следующих шагов (вы можете увидеть полную статью здесь)
На первый взгляд это может показаться правильным, но процесс поиска атрибутов немного сложнее, например, для x.foo он ведет себя иначе, если x является классом или экземпляром.
Я нашел несколько образцов, которые не могут быть объяснены таким образом.Рассмотрим следующий код Python:
class Meta(type):
def __getattribute__(self, name):
print("Metaclass getattribute invoked:", self)
return type.__getattribute__(self, name)
def __getattr__(self, item):
print('Metaclass getattr invoked: ', item)
return None
class C(object, metaclass=Meta):
def __getattribute__(self, name):
print("Class getattribute invoked:", args)
return object.__getattribute__(self, name)
c=C()
Теперь проверьте следующие строки с соответствующим выводом:
>> C.__new__
Metaclass getattribute invoked:
>> C.__getattribute__
Metaclass getattribute invoked:
>> C.xyz
Metaclass getattribute invoked:
Metaclass getattr invoked: xyz
None
>> c.__new__
Class getattribute invoked: (<__main__.C object at 0x013E7550>, '__new__')
>> c.__getattribute__
Class getattribute invoked: (<__main__.C object at 0x01438DB0>, '__getattribute__')
Metaclass getattribute invoked:
>
>>
Я сделал следующие выводы: (учитывая, что мы ищем x.foo):
Может кто-нибудь объяснить это, пожалуйста?? или, по крайней мере, скажите мне, где я могу найти документацию по этому поводу, спасибо.