Как проверить (во время выполнения), является ли один класс подклассом другого?
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)