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的Django框架中Manager方法的使用
Jul 21 Python
Python环境搭建之OpenCV的步骤方法
Oct 20 Python
Python实现字典按照value进行排序的方法分析
Dec 23 Python
使用requests库制作Python爬虫
Mar 25 Python
对numpy中shape的深入理解
Jun 15 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
python 命名规范知识点汇总
Feb 14 Python
python中常用的数据结构介绍
Jan 12 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
php HandlerSocket的使用
2011/05/02 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
Using the TextRange Object
2006/10/14 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
python基础教程之常用运算符
2014/08/29 Python
浅析Python中signal包的使用
2015/11/13 Python
Python tkinter事件高级用法实例
2018/01/31 Python
Python程序运行原理图文解析
2018/02/10 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
MySQL面试题目集锦
2016/04/14 面试题
挑战杯创业计划书的写作指南
2014/01/07 职场文书
会议接待欢迎词
2014/01/12 职场文书
美发活动策划书
2014/01/14 职场文书
八项规定整改方案
2014/02/21 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
垂直极限观后感
2015/06/08 职场文书
公司员工离职感言
2015/08/03 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js