1. 程式人生 > >Python的issubclass注意事項

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模組地址已變!