Python 关于反射和类的特殊成员方法


Posted in Python onSeptember 14, 2017

反射

反射即想到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)
Python 相关文章推荐
python实现用于测试网站访问速率的方法
May 26 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
python 定义给定初值或长度的list方法
Jun 23 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
在Python中执行系统命令的方法示例详解
Sep 14 #Python
关于Python如何避免循环导入问题详解
Sep 14 #Python
Python实现随机选择元素功能
Sep 14 #Python
python自动化脚本安装指定版本python环境详解
Sep 14 #Python
python实现八大排序算法(2)
Sep 14 #Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 #Python
python实现八大排序算法(1)
Sep 14 #Python
You might like
一些关于PHP的知识
2006/11/17 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
实习自我评价怎么写
2013/12/02 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
董事长助理工作职责
2014/06/08 职场文书
艾滋病宣传标语
2014/06/25 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
创业计划书之酒店
2019/08/30 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
Redis实战高并发之扣减库存项目
2022/04/14 Redis