Как проверить (во время выполнения), является ли один класс подклассом другого?
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
у меня есть метод, который получает костюм в качестве параметра, который является объектом класса, а не экземпляра. Точнее, он может получить только одно из четырех значений: сердце, лопата, бриллиант, дубинка. Как я могу сделать утверждение, которое гарантирует такую вещь? Что-то вроде:
def my_method(suit):
assert(suit subclass of Suit)
...
Я использую Python 3.
7 ответов:
можно использовать
issubclass()такойassert issubclass(suit, Suit).
но почему вы хотите сделать такую вещь? Python-это не Java.
выдержка:
возвращает true, если
classявляется подклассом (прямым, косвенным или виртуальным)classinfo.
можно использовать
isinstanceЕсли у вас есть экземпляр, илиissubclassесли у вас есть класс. Обычно думал, что это плохая идея. Обычно в Python вы работаете, если объект способен на что-то, пытаясь сделать это с ним.
The
issubclass(sub, sup)булева функция возвращает true, если данный подклассsubдействительно подкласс суперклассаsup.
вы можете использовать встроенный issubclass. Но проверка типа обычно рассматривается как ненужная, потому что вы можете использовать утиный ввод.
использование issubclass казалось чистым способом записи лог-уровней. Это как-то странно использовать его... но, кажется, чище, чем другие варианты.
class Error(object): pass class Warn(Error): pass class Info(Warn): pass class Debug(Info): pass class Logger(): LEVEL = Info @staticmethod def log(text,level): if issubclass(Logger.LEVEL,level): print(text) @staticmethod def debug(text): Logger.log(text,Debug) @staticmethod def info(text): Logger.log(text,Info) @staticmethod def warn(text): Logger.log(text,Warn) @staticmethod def error(text): Logger.log(text,Error)