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__ # 使用类似字典方式设置成员时必须实现 ...
随机推荐
- 关于find命令的一些知识
在服务器运维的过程中,我们会用到这样一个命令,关于这个命令,你知道多少呢?接下来,咱们一起来研究一下它的用途. find命令主要用来在硬盘上搜索文件, find命令主要用于文件查找,列出当前目录及子目 ...
- Oracle 启动监听命令
win10系统,在win右击"运行"-->输入"services.msc" ,来到服务窗口,找Oracle的相关服务 OracleOraDb10g_hom ...
- 【BZOJ 2673】[Wf2011]Chips Challenge
题目大意: 传送门 $n*n$的棋盘,有一些位置可以放棋子,有一些已经放了棋子,有一些什么都没有,也不能放,要求放置以后满足:第i行和第i列的棋子数相同,同时每行的棋子数占总数比例小于$\frac{A ...
- bzoj 1064 假面舞会 图论??+dfs
有两种情况需要考虑 1.链:可以发现对最终的k没有影响 2.环:如果是真环(即1->2->3->4->1),可以看出所有可行解一定是该环的因数 假环呢??(1->2-&g ...
- BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案
BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 分析: ...
- [JSOI2008]星球大战starwar BZOJ1015
并查集 正序处理时间复杂度为n^2,考虑逆序处理,这样,时间复杂度从n^2降为nlogn 附上代码: #include <cstdio> #include <algorithm> ...
- const和static readonly的区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...
- volitale、synchronized、RetreenLock区别
synchronized和RetreenLock锁区别 1.synchronized是java关键字,RetreenLock是个java类 2.synchronized无法获取锁状态,Lock可以判断 ...
- 吴恩达深度学习笔记1-神经网络的编程基础(Basics of Neural Network programming)
一:二分类(Binary Classification) 逻辑回归是一个用于二分类(binary classification)的算法.在二分类问题中,我们的目标就是习得一个分类器,它以对象的特征向量 ...
- 『神坑』DotNetty 内存泄漏 解决办法
背景 近来在用 DotNetty 实现一个文件上传下载的同步服务. 其中:客户端下载服务端的文件,客户端多次请求,从服务端将文件分片下载下来,追加到本地磁盘. —— 非常简单的代码,都写了几十次了,驾 ...