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__ # 使用类似字典方式设置成员时必须实现 ...
随机推荐
- 如何解决开机出现Missing operating system的故障
刚刚一哥们火急火燎的来找我,说他的笔记本开机出现一行字,进不了系统,好可怕,里面存了好多资料呢,让我给他看看,看能不能整好.看的出来,把他吓坏了.我开玩笑问他是不是遇到勒索的了,显示的那句话是不是&q ...
- 【建图+拓扑判环】BZOJ3953: [WF2013]Self-Assembly
Description 自动化学制造(Automatic Chemical Manufacturing,简称ACM)正在对一个叫自组装(self-assembly)的过程进行实验.在这个过程中,有着天 ...
- python黑科技:还在为没有wifi而烦心吗?这篇文章解决你的困扰
python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身.Python虽然是基于C语言编写,但是 ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
- Jenkins使用教程
1 软件安装 1.1 运行环境 1.1.1 Maven的安装 1.1.2 Git的安装 1.1.3 Tomcat的安装 1.2 安装Jenkins 1.2.1 msi和war包安装2 ...
- SAP S4系统创建Customer和Vendor的BAPI
对应的BAPI是:RFC_CVI_EI_INBOUND_MAIN SAP 又调皮了,又不安常理出牌!
- with管理文件操作上下文
目录 with管理文件操作上下文(掌握) with管理文件操作上下文(掌握) 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用.但是其实我们可以更方便 ...
- Spring学习(一):理解IoC容器
序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...
- NET 泛型,详细介绍
今天的文章是因为再给一个朋友讲这个的时候随手记录下整理出来的.说白了就是把前辈们曾经给我吹过的我又吹了出去. 泛型:是C# FrameWork 2.0 时代 加入进来的,可以说对与Net开发人员来说泛 ...
- Python json序列化
Python内置的json模块提供了非常完善的对象到JSON格式的转换.废话不多说,我们先看看如何把Python对象变成一个JSON: d = dict(name='Kaven', age=17, s ...