• 一、issubclass/type/isinstance
    • 1、issubclass(类1,类2)检查宿舍类1是否是类2的子集,返回一个布尔值
      class Base(object):
          pass
      
      class Foo(Base):
          pass
      
      class Bar(Foo):
          pass
      
      print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
    • 2、type 获取当前对象是由哪个类创建的,只能关照一代,无法得知创建类的基类
    • 3、isinstance(对象,类)检查该对象是否是该类的实例,对于该类的基类同样可以实现(扩充:所有的类都是由“type”所创建。所以判断一个数据是不是一个类,可以使用isinstance(类名,type)
  • 二、科学的判断一个东西是方法还是函数
    • 1、我们可以粗略的认为,在类里的就叫函数,不在类里面的就叫方法
    • 2、可以引入两个模块:from types import Methodtype,Functiontype;属于类Methodtype的就是方法,属于Functiontype的就是函数
      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)
      

       

  • 三、反射
    • 1、getattr(对象/类/模块,字符串)根据第二个字符串为参数,在前者中寻找到与其同名的成员
    • 2、hasattr 判断目标对象中是否存在与该字符串同名的成员
    • 3、setattr 动态添加一个成员 setattr(对象,成员名,内容),动态的添加
    • 4、delattr 动态删除一个成员,动态删除
  • 四、callable 判断目标是否可以被调用
  • 五、若是想将一个不可以迭代对象变成可迭代对象,在对象中加入__iter__方法,然后返回一个迭代器
    class Foo(object):
        def __iter__(self):                 #加入__iter__方法
            return iter([1,2,3,4,5]).     #返回一个迭代器,
    for i in Foo():
        print(i)            
    

     

posted on 2018-09-03 20:27  哈尔斯塔特  阅读(127)  评论(0)    收藏  举报