方法用於判斷第一個參數是不是第二個參數的子子孫孫類。shell
語法:issubclass(sub, super) 檢查sub類是不是 super 類的派生類 class A: pass class B(A): pass print issubclass(B,A)
type()
給你一個參數,判斷對象是否是由某一個指定類? --> type(obj) == Foo
class Foo(object): pass class Bar(object): pass def func(*args): foo_counter =0 bar_counter =0 for item in args: if type(item) == Foo: foo_counter += 1 elif type(item) == Bar: bar_counter += 1 return foo_counter,bar_counter # result = func(Foo(),Bar(),Foo()) # print(result) v1,v2 = func(Foo(),Bar(),Foo()) print(v1,v2)
來判斷一個對象是不是一個已知的類型,相似 type()。ide
class Base(object): pass class Foo(Base): pass obj1 = Foo() print(isinstance(obj1,Foo)) print(isinstance(obj1,Base))
1,用於檢查一個對象是不是可調用的。若是返回True,object仍然可能調用失敗;但若是返回False,調用對象ojbect絕對不會成功。函數
2,對於函數, 方法, lambda 函式, 類, 以及實現了 __call__ 方法的類實例, 它都返回 True。spa
3.,類對象都是可被調用對象,類的實例對象是否可調用對象,取決於類是否認義了__call__方法。3d
>>> class A: #定義類A
passcode
>>> callable(A) #類A是可調用對象
True
>>> a = A() #調用類A
>>> callable(a) #實例a不可調用
False
>>> a() #調用實例a失敗
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
a()
TypeError: 'A' object is not callable對象
>>> class B: #定義類B
def __call__(self):
print('instances are callable now.')blog
>>> callable(B) #類B是可調用對象
True
>>> b = B() #調用類B
>>> callable(b) #實例b是可調用對象
True
>>> b() #調用實例b成功
instances are callable now.it
class Base: def f1(self): print('5個功能') class Foo: def f1(self): print('3個功能') Base.f1(obj) obj = Foo() obj.f1()
class Foo: def f1(self): super().f1() print('3個功能') class Bar(object): def f1(self): print('6個功能') class Info(Foo,Bar): pass obj = Info() obj.f1() 結果: 6個功能 3個功能 #super()是從當前位置找他的下一個方法