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字符串中查找子串小技巧
Apr 10 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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/10/09 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
Python 异常处理实例详解
2014/03/12 Python
PyMongo安装使用笔记
2015/04/27 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Python更新所有已安装包的操作
2020/02/13 Python
python中wx模块的具体使用方法
2020/05/15 Python
Python是什么 Python的用处
2020/05/26 Python
python如何对链表操作
2020/10/10 Python
python collections模块的使用
2020/10/16 Python
python中操作文件的模块的方法总结
2021/02/04 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
服装厂厂长岗位职责
2013/12/27 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
个人收入证明格式
2015/06/24 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
使用Python解决图表与画布的间距问题
2022/04/11 Python