面向对象相关
1. isinstance/issubclass/type
1.1. isinstance 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
class Base(object): pass class Foo(Base): pass obj1 = Foo() print(isinstance(obj1,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 print(isinstance(obj1,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 obj2 = Base() print(isinstance(obj2,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 print(isinstance(obj2,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
1.2. issubclass 检查第一个参数是否是第二个参数的 子子孙孙类
class Base(object): pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
1.3. type 获取当前对象是由那个类创建
class Foo(object): pass obj = Foo() print(obj,type(obj)) # 获取当前对象是由那个类创建。 if type(obj) == Foo: print('obj是Foo类型') else: print('obj不是Foo类型')
2. 方法和函数
2.1.如何判断是方法还是函数:MethodType, FunctionType
from types import MethodType, FunctionType # 先引入模块 def chenk(args): if isinstance(args, MethodType): print('是方法') elif isinstance(args, FunctionType): print('是函数') chenk(xxx)
想要看谁是方法还是函数就把谁传入到函数里,再判断
2.2. callable()判断什么就把什么括起来 返回True就可以被调用,反之false就不可被调用
3. 反射
getattr 根据字符串的形式,去对象中找成员。(根据第二个参数(字符串)去第一个参数(对象,类或模块)中寻找与之同名的成员)
hasattr 根据字符串的形式,去判断对象中是否有成员。(判断第一个参数(对象,类或模块)中是否有第二个参数(字符串)这个成员)
setattr 根据字符串的形式,动态的设置一个成员(内存)
delattr 根据字符串的形式,动态的删除一个成员(内存)
class Foo(): def __init__(self,name): self.name = name def func(self): print('我是%s,长得帅'% self.name) obj = Foo('侯明巍') setattr(obj,'age',26) # 动态的给对象设置一个变量(改变变量的值) # 实际开发中慎用setattr,能不用就不用 print(getattr(obj,'age')) # print(obj.name) # delattr(obj,'name') # 删除对象中的变量 # print(obj.name) val = input('请输入要执行的动作:') if hasattr(obj,val): func = getattr(obj,val) func()