Как проверить порядок суперкласса в python? - PullRequest
0 голосов
/ 04 сентября 2018

Дать следующий код:

class X(Mixin, Y):
    pass

Как я могу написать unittest, чтобы гарантировать, что класс Mixin находится перед Y в объявлении суперкласса X?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Не проверяйте это . Если вы не пишете тесты для самой реализации Python.

Набор тестов вашей библиотеки не несет ответственности за проверку того, что интерпретатор Python работает так, как задумано. Mixin появляется перед Y в объявлении, самоочевидно при чтении кода, и тот факт, что Python оценивает инициализаторы слева направо в множественном наследовании, задокументирован здесь .

Примечание: Я не , говоря, что это поведение не должно проверяться, просто такие тесты не должны дублироваться кодом пользователя. Это должно быть включено в набор тестов реализации, например, здесь для CPython.

0 голосов
/ 04 сентября 2018

Вы можете проанализировать вывод X.mro(), который возвращает m ethod r esolution o rder и убедиться, что Mixin предшествует Y

class Mixin: pass

class Y: pass

class X(Mixin, Y): pass

print(X.mro())
# [<class '__main__.X'>, <class '__main__.Mixin'>, <class '__main__.Y'>, <class 'object'>]

Однако я не уверен, что это не детали реализации и сколько можно (или нужно) рассчитывать на порядок подклассов. Если от этого зависит ваш код, возможно, в дизайне что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...