Python的issubclass注意事項
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模組地址已變!