成都网站建设设计

将想法与焦点和您一起共享

关于Python中自省与反射的案例-创新互联

创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了修文免费建站欢迎大家使用!

这篇文章主要介绍关于Python中自省与反射的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Python中的自省与反射

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

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

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

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

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

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

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

操作演示

应用场景

# ==== 这样做的好处是即使用户输入有误,也不会抛出异常 ====

import sys

class 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中自省与反射的案例-创新互联
本文来源:http://chengdu.cdxwcx.cn/article/depgdc.html