issubclasss/type/isinstance/callable/super

issubclass() :

  方法用于判断第一个参数是否是第二个参数的子子孙孙类。

语法: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()。

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。

  3.,类对象都是可被调用对象,类的实例对象是否可调用对象,取决于类是否定义了__call__方法。

>>> class A: #定义类A
pass

>>> 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.')


>>> callable(B) #类B是可调用对象
True
>>> b = B() #调用类B
>>> callable(b) #实例b是可调用对象
True
>>> b() #调用实例b成功
instances are callable now.

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

 

 
posted @ 2018-09-01 18:35  傻白甜++  阅读(277)  评论(0编辑  收藏  举报
TOP