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生成验证码实例
Aug 21 Python
Python Sleep休眠函数使用简单实例
Feb 02 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python实现字典去除重复的方法示例
Jul 31 Python
import的本质解析
Oct 30 Python
python中的反斜杠问题深入讲解
Aug 12 Python
python中os包的用法
Jun 01 Python
Python pip使用超时问题解决方案
Aug 03 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
Pytorch 如何实现常用正则化
May 27 Python
Python读取和写入Excel数据
Apr 20 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 安装方法
2007/01/15 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
PHP中overload与override的区别
2017/02/13 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
pyqt5实现登录界面的模板
2020/05/30 Python
解决Python3下map函数的显示问题
2019/12/04 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
html5的localstorage详解
2017/05/09 HTML / CSS
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
产品生产计划书
2014/05/07 职场文书
学校就业推荐信范文
2014/05/19 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
队列队形口号
2015/12/25 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android