关于Python中自省与反射的案例(python,反射,自省,开发技术)

时间:2024-05-05 18:02:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

Python中的自省与反射

  由于Python是一门强类型的动态解释型语言,故我们在某些时候并不会知道(特别是与别人对接开发工作的时候)对象中具有的属性与方法。

  这个时候我们并不能直接通过 .或者查看底层的 __dict__ 方法来获得该对象下的属性与方法,我们需要使用一种更文明的方式来获取该对象下的属性与方法,故这种文明的方式被称之为反射。

  自省和反射是两个比较专业化的术语,首先自省是获取对象的能力,而反射是操纵对象的能力。

  Python中使用delattr()和setattr()实现反射,而其他方法则属于自省。

  反射和自省常常组合使用!

Python中关于反射与自省的部分方法常用方法dir()返回一个列表,存储该对象下能被.出的所有属性与方法。hasattr()查看对象是否具有某种属性或方法,返回True或者False。getattr()获取对象下的某一属性或方法。如被获取对象没有相应的属性或方法,则可以为其设置默认值。setattr()设置对象下的某一属性的值,通常我们不会在对象外部为其新增某一方法,而是在在对象的类中进行设置。delattr()删除对象中的某一属性或方法。其他的一些方法help()获取对象的帮助信息,注意。没有返回值!内部会调用print()进行打印操作。issubclass()判断一个类是不是另一个类的子类isinstance()判断一个对象是否是一个已知的类型id()返回存储对象的内存地址编号callable()判断对象是否可调用

注意:于一切皆对象的原则,我们不仅可以对实例对象进行自省与反射,也可以对类对象进行自省与反射。

操作演示

应用场景

# ==== 这样做的好处是即使用户输入有误,也不会抛出异常 ====import sysclass DownloadAndUpload(object): def __init__(self): self.val = sys.argv[1] self.select() def download(self): print("正在下载...") def upload(self): print("正在上传...") def select(self): if hasattr(self,self.val): getattr(self,self.val)() else: print("没有该方法")DownloadAndUpload() 

关于Python中自省与反射的案例

扩展与后言:反射内部实现机制

其实我想了好一会要不要写这个,内部实现机制。这一些内容应该放在双下方法学完之后才应该讲反射实现的内部机制。所以这里提一嘴:

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:关于Python中自省与反射的案例的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:python删除excel表格重复行,数据预处理的方法下一篇:

1 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18