2017-02-23 80 views
0

Интересно о том, что, похоже, что разрешение порядка метод атрибута MRO не доступен в Python 3.x больше. Использование Python 3.5.2 и создания случайного класса экземпляра объекта A, встроенный или самостоятельно реализовать, напримерМетод разрешения разрешения (__mro__) недоступен в Python3.x?

A = dict() 

и затем вызвать

A.__mro__ 

не работает, поднимая

AttributeError: 'A' object has no attribute '__mro__' 

Я попытался использовать A.mro(), но это дает тот же тип исключения. Как мне получить порядок разрешения метода сейчас?

+0

Попробуйте 'object.mro()'. –

+0

Что такое 'A'? и как вы его определили? – Kasramvd

+0

Ответ, приведенный ниже, Антти решил. Я все равно отредактирую вопрос, чтобы было ясно, что я говорю об A как экземпляре объекта класса. – joaquinn

ответ

6

Это не работает на экземпляров. Ошибка намекает, что в вопросе переменная A не привязана к типу, но к например класса A. типы (классы) очень есть __mro__:

>>> int.__mro__ 
(<class 'int'>, <class 'object'>) 
>>> class Foo(): 
...  pass 
... 
>>> Foo.__mro__ 
(<class '__main__.Foo'>, <class 'object'>) 

Поскольку A является экземпляром типа, а не сам тип, вы можете использовать type(A).__mro__.

Кроме того, ваш код не работал бы в Python 2 либо; Нет, экземпляры не имели __mro__.

+0

Спасибо, подсказка экземпляра прибила его! Я не знал об этом. Я отмечу это как ответ – joaquinn

+0

@joaquinn Если 'A' является экземпляром пользовательского объекта, который вы можете получить доступ к классу' 'mro' от A .__ класса __.__ mro__' или' типа (е) .__ mro__'. – Kasramvd

Смежные вопросы