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的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
Python实现数通设备端口使用情况监控实例
Jul 15 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
pandas 读取各种格式文件的方法
Jun 22 Python
Pycharm更换python解释器的方法
Oct 29 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 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搭建大文件切割分块上传功能示例
2017/01/04 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
多广告投放代码 推荐
2006/11/13 Javascript
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
React组件生命周期详解
2017/07/03 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
市场营销方案范文
2014/03/11 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
葬礼主持词
2015/07/02 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2016年教师节慰问信
2015/12/01 职场文书
医学会议开幕词
2016/03/03 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP