Python的ctypes库中提供了一个接口来查询是不是其个类的子类。
issubclass()
帮助文档如下:
Help on built-in function issubclass in module __builtin__:
issubclass(...)
issubclass(C, B) -> bool
Return whether class C is a subclass (i.e., a derived class) of class B.
When using a tuple as the second argument issubclass(X, (A, B, ...)),
is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).
这个文档说得很简单,就是C是不是B的子类。
实际上是指同一个模块下的类,而不是不同模块下的类。
例如:
文件夹Base
__init__.py Base.py
Base.py
class Base():
pass
文件夹Derived
__int__.py Derived.py Base.py
Derived.py
from Base import *
class Derived(Base):
pass
如上所示,Derived文件夹下有Base文件夹,则会出现2个Base类,最后import的会当前的Base类,而此时 Derived中的Base类实际上是
Derived.Base.Base,而Base下的Base类地址是 Base.Base
继承的结果也是不一样的,尽管这两个Base类完全一样,Copy过来的,但它的路径却不同
实验如下:
test.py
from Derived.Derived import *
issubclass(Derived, Base) True 此时成功,因此是同一个Base!
from Base.Base import *
issubclass(Derived, Base) False 此时失败,Base模块地址已变!