Python的魔法函数系列 __getattrbute__和__getattr__
#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys __metaclass__ = type """
__getattr__ 和 __getattribute__ 的区别
""" class ClassName:
def __init__(self, name, info={}):
self.name = name
self.info = info # def __getattribute__(self, item):
# """
# 这个魔法函数也是针对属性的,但是它的特点是在__getattr__之前执行,而且无论你访问
# 的属性是不是存在都返回这个函数里面的返回值。也就是你访问什么属性都返回一样的东西。
# 所以这个方法尽量不要自己重写。
# :param item:
# :return:
# """
# return "HELLO" def __getattr__(self, item):
"""
这个魔法函数式在你试图访问一个不存在的属性时调用的,如果没有这个魔法函数
访问不存在的属性程序会报错,但是如果有这个函数你就可以加入逻辑处理,比如
返回一个 None,或者打印一些提示内容,或者进行纠正,比如你的属性都是小写
对方访问一个大写的,你这里就可以自动转换等
:param item:
:return: None 其实不加return默认也会返回None
"""
return self.info.get(item)
# print("not found.", item)
# return None if __name__ == "__main__":
cn = ClassName("Tom", info={"sex": "F"})
# 本身类里面没有sex这个属性,我们通过字典传递进去的,你可以使用 __getattr__ 魔法函数,其实它就是去 __dict__里面去找
# 让他可以访问字典。
print(cn.sex)
print(cn.__dict__)
如果我们把__getattribute__取消注释再次执行
#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys __metaclass__ = type """
__getattr__ 和 __getattribute__ 的区别
""" class ClassName:
def __init__(self, name, info={}):
self.name = name
self.info = info def __getattribute__(self, item):
"""
这个魔法函数也是针对属性的,但是它的特点是在__getattr__之前执行,而且无论你访问
的属性是不是存在都返回这个函数里面的返回值。也就是你访问什么属性都返回一样的东西。
所以这个方法尽量不要自己重写。
:param item:
:return:
"""
return "HELLO" def __getattr__(self, item):
"""
这个魔法函数式在你试图访问一个不存在的属性时调用的,如果没有这个魔法函数
访问不存在的属性程序会报错,但是如果有这个函数你就可以加入逻辑处理,比如
返回一个 None,或者打印一些提示内容,或者进行纠正,比如你的属性都是小写
对方访问一个大写的,你这里就可以自动转换等
:param item:
:return: None 其实不加return默认也会返回None
"""
return self.info.get(item)
# print("not found.", item)
# return None if __name__ == "__main__":
cn = ClassName("Tom", info={"sex": "F"})
# 本身类里面没有sex这个属性,我们通过字典传递进去的,你可以使用 __getattr__ 魔法函数,其实它就是去 __dict__里面去找
# 让他可以访问字典。
print(cn.sex)
print(cn.__dict__)
两次结果都是HELLO
Python的魔法函数系列 __getattrbute__和__getattr__的更多相关文章
- gj3 Python数据模型(魔法函数)
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...
- python常用魔法函数
1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...
- python使用魔法函数创建可切片类型
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 可切片的对象 """ import nu ...
- 16个python常用魔法函数
==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...
- Python常用功能函数系列总结(一)
本节目录 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 写在前面 写代码也有很长时间了,总觉得应该做点什么有价值的事情,写代码初始阶段 ...
- Python的魔法函数
概要 如何定义一个类 类里通常包含什么 各个部分解释 类是怎么来的 type和object的关系 判断对象的类型 上下文管理器 类结构 #!/usr/bin/env python # -*- codi ...
- Python内置函数系列
Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义. 作用域相关(2) locals() :以字典类型返回当前位置 ...
- Python常用功能函数系列总结(三)
本节目录 常用函数一:词频统计 常用函数二:word2vec 常用函数三:doc2vec 常用函数四:LDA主题分析 常用函数一:词频统计 # -*- coding: utf-8 -*- " ...
- Python的魔法函数之 - __len__,__getitem__,__setitem__,__delitem__
# 对象作为len()函数的参数是必须实现该方法 __len__ # 使用类似字典方式访问成员时必须实现 dic['pro_name'] __getitem__ # 使用类似字典方式设置成员时必须实现 ...
随机推荐
- BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演
BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...
- HTTP 和 WebSocket的区别
有关http和WebSocket 的区别网上有很多的质料. 个人在此仅仅是记录以下自己的学习心得,自己的理解. 1. http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要 ...
- openoffice转换pdf 异常问题查找处理 errorCode 525
could not save output document; OOo errorCode: 525 该问题是由于java程序和openoffice的启动所属用户不同导致.使用以下命令查看端口和进程 ...
- Discuz3.4-SSRF-从触发点到构造payload
目录 SSRF逆向分析 0x00 前言 0x01 收集情报 0x02 尝试逆向找到触发点 0x03 尝试构造payload 0x04 总结 SSRF逆向分析 0x00 前言 之前有复现过一些漏洞,但是 ...
- H5单张、多张图片上传
前言 今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件数不胜数,例如:Jquery的 verupload.js,jQuery File Upload.Uploadify.jQuery.f ...
- c#批量抓取免费代理并验证有效性
之前看到某公司的官网的文章的浏览量刷新一次网页就会增加一次,给人的感觉不太好,一个公司的官网给人如此直白的漏洞,我批量发起请求的时候发现页面打开都报错,100多人的公司的官网文章刷新一次你给我看这个, ...
- Maven构建Struts2项目
1.添加Struts2依赖 这里主需要在pom.xml中添加一个struts-core的依赖即可: <project xmlns="http://maven.apache.org/PO ...
- Dubbo Mesh 在闲鱼生产环境中的落地实践
本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...
- 使用myeclipse修改项目映射路径
这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...
- .net mvc前台如何接收和解析后台的字典类型的数据
很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...