- 一、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、issubclass(类1,类2)检查宿舍类1是否是类2的子集,返回一个布尔值
- 二、科学的判断一个东西是方法还是函数
- 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)
浙公网安备 33010602011771号