issubclasss/type/isinstance/callable/super

issubclass() :

  方法用於判斷第一個參數是不是第二個參數的子子孫孫類。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)
實例

isinstance()

  來判斷一個對象是不是一個已知的類型,相似 type()。ide

class Base(object):
    pass

class Foo(Base):
    pass

obj1 = Foo()
print(isinstance(obj1,Foo))  
print(isinstance(obj1,Base))
實例

callable()

   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

super--主動調用其餘類的方法:

class Base:

    def f1(self):
        print('5個功能')

class Foo:

    def f1(self):
        print('3個功能')
        Base.f1(obj)

obj = Foo()
obj.f1()
方法1
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()是從當前位置找他的下一個方法
方法2
本站公眾號
   歡迎關注本站公眾號,獲取更多信息