欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

Python学习之反射和类的特殊成员方法详解

发布时间:2017-09-18 15:29  回复:0  查看:2554   最后回复:2017-09-18 15:29  
本文和大家分享的主要是python 中有关 反射和类的特殊成员方法,一起来看看吧,希望对大家 学习python有所帮助。
   反射
  反射即想到4 个内置函数分别为 :getattr hasattr setattr delattr   获取成员、检查成员、设置成员、删除成员
   class  Dog(object):
   def  __init__(self,name):
  self.name = name
   def  eat(self):
  print("%s is eating..."%self.name)
   def  run():
  print("runing ....")
  d = Dog("lucy")
  choise=input(" 请输入要调用的方法: ") if hasattr(d,choise):# 判断一个对象是否有对应的字符串方法
  func=getattr(d,choise)# 根据字符串去获取对象里相应的方法或属性的内存地址对象
  func() else:
  setattr(d,choise,run)#setattr obj y fun )相当于 obj.y=fun fun 可以是属性或者方法
  v=getattr(d,choise)
  print(v)
  dir([obj]):
  调用这个方法将返回包含obj 大多数属性名的列表(会有一些特殊的属性不包含在内)。 obj 的默认值是当前的模块对象。
  hasattr(obj, attr):
  这个方法用于检查obj 是否有一个名为 attr 的值的属性,返回一个布尔值。
  getattr(obj, attr):
  调用这个方法将返回obj 中名为 attr 值的属性的值,例如如果 attr 'bar' ,则返回 obj.bar
   setattr(obj, attr, val):
  调用这个方法将给obj 的名为 attr 的值的属性赋值为 val 。例如如果 attr 'bar' ,则相当于 obj.bar = val
  __doc__  查看尖的描述信息
  __module__ 表示当前操作的对象所在的模块
  __class__ 表示当前操作的对象所属的类
  __init__ 构造方法 通过类创建对象自动执行
  __del__ 析构方法 , 当前对象在内存中被释放自动斩妖执行
  __call__ 对象后面加括号触发执行
  __dict__ 查看类或对象中的成员
  __str__ 如果一个类中定义了此方法 , 那么打印此类对象时 , 输出此方法的返回值
  __getitem__ 当类中定义了一个字典的属性成员 , 可以获取
  __setitem__ 设置修改类中字典的数据
  __delitem__ 删除 类中字典的数据
  __metalass__ 其用来表示该类由 谁 来实例化创建
  __new__ 触发  __init__ 创建实例
   from lib.ss  import a# 示例类  dog class  doges(object):
  """ 类的描述信息 """
   def  __init__(self,name,food):
  self.name=name
  self.food=food
  self.data={}# 定义一个类的字典
   def  __call__(self, *args, **kwargs):# 对象后面加括号解执行
  print(*args)
   def  __str__(self):# 默认输出返回值
   return self.name
   def  __getitem__(self):# 可以获取类的的字典
   return self.data
   def  __setitem__(self, key, value):# 可以设置类的的字典
  self.data[key]=value
   def  __delitem__(self, key):# 可以删除类的字典的内容
   del self.data[key]
  dog=doges('xxx','iii')
  print(dog.__doc__)
  b=a()
  print(b.__module__)# 操作的对象的那个模块
  print(dog.__class__)# 当前操作的对象的类是什么
  dog('111')#
  print(doges.__dict__)# 查看类或对象的成员  类只打印类的成员不打印对象的成员
  print(dog.__dict__)# 查看类或对象的成员 对象只打印对象的成员不打印类的成员
  print(dog)# 打印  __str__ 的返回值
  print(dog.__str__())# 打印返回值
  dog['1']=1000# 触发 .__setitem__()
  dog['2']=1000# 触发 .__setitem__()
  print(dog.__getitem__())
  print(dog.__delitem__('1'))# 删除类中字典
  print(dog.__getitem__())
  # 设置类的特殊方法 def  func(self):
  print('hello word%s'%self.name)
  print()
   def  __init__(self,name,age):
  self.name=name
  self.age=age##type 参数  1: 类名  2. 类的基类  3. 类的成员 , 字典格式
  CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
  cat=CAT(' 喵喵 ',3)
  cat.func()
  print(cat.name,cat.age)
来源: 博客园

您还未登录,请先登录

热门帖子

最新帖子