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 json模块使用实例
Apr 11 Python
在Python中处理时间之clock()方法的使用
May 22 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
Python代码实现KNN算法
Dec 20 Python
简单了解什么是神经网络
Dec 23 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Python基础之操作MySQL数据库
May 06 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
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python实现文件快照加密保护的方法
2015/06/30 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python实现飞机大战
2018/09/11 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
在django模板中实现超链接配置
2019/08/21 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
SQL数据库笔试题
2016/03/08 面试题
初中生自我鉴定
2014/02/04 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2015年重阳节主持词
2015/07/04 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
工作建议书范文
2019/07/08 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis