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 09 Python
在Django中创建第一个静态视图
Jul 15 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
教你使用python画一朵花送女朋友
Mar 29 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
keras topN显示,自编写代码案例
Jul 03 Python
详解scrapy内置中间件的顺序
Sep 28 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
php模板原理讲解
2013/11/13 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
深入学习python的yield和generator
2016/03/10 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
对python中的logger模块全面讲解
2018/04/28 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
pandas重新生成索引的方法
2018/11/06 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
python可以用哪些数据库
2020/06/22 Python
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
应聘文员自荐信范文
2014/03/11 职场文书
微笑服务演讲稿
2014/05/13 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
保管员岗位职责
2015/02/14 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
工作简历的自我评价
2019/05/16 职场文书