我如何检查(在运行时)如果一个类是另一个类的子类?

假设我有一套西装和四套西装:心,黑桃,钻石,俱乐部。

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。

你可以使用issubclass()这样的assert issubclass(suit, Suit)

但是你为什么要这样做呢? Python不是Java。

issubclass

如果你有一个实例,你可以使用isinstance ,如果你有一个类,可以使用issubclass 。 通常认为这是一个坏主意。 通常在Python中,如果一个对象能够通过尝试对它进行操作就可以解决这个问题。

如果给定的子类sub确实是超类sup的子类,则issubclass(sub, sup)布尔函数返回true。

你可以使用内build的issubclass。 但是types检查通常被认为是不必要的,因为你可以使用鸭子键入。

使用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) 
 #issubclass(child,parent) class a: pass class b(a): pass class c(b): pass print(issubclass(c,b))#it returns true