#!/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__的更多相关文章

  1. gj3 Python数据模型(魔法函数)

    3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...

  2. python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  3. python使用魔法函数创建可切片类型

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 可切片的对象 """ import nu ...

  4. 16个python常用魔法函数

    ==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...

  5. Python常用功能函数系列总结(一)

    本节目录 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 写在前面 写代码也有很长时间了,总觉得应该做点什么有价值的事情,写代码初始阶段 ...

  6. Python的魔法函数

    概要 如何定义一个类 类里通常包含什么 各个部分解释 类是怎么来的 type和object的关系 判断对象的类型 上下文管理器 类结构 #!/usr/bin/env python # -*- codi ...

  7. Python内置函数系列

    Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义. 作用域相关(2) locals()  :以字典类型返回当前位置 ...

  8. Python常用功能函数系列总结(三)

    本节目录 常用函数一:词频统计 常用函数二:word2vec 常用函数三:doc2vec 常用函数四:LDA主题分析 常用函数一:词频统计 # -*- coding: utf-8 -*- " ...

  9. Python的魔法函数之 - __len__,__getitem__,__setitem__,__delitem__

    # 对象作为len()函数的参数是必须实现该方法 __len__ # 使用类似字典方式访问成员时必须实现 dic['pro_name'] __getitem__ # 使用类似字典方式设置成员时必须实现 ...

随机推荐

  1. protocol_v2.go

    {         return protocol.NewFatalClientErr(nil, "E_INVALID",             fmt.Sprintf(&quo ...

  2. java equals和tostring

    Object类概述 是所有类中的父类,最大的超类,所有的类都继承他. equals方法 比较2个对象是否相同,其实他是在比较两个对象的地址是否相同,在equals方法中我们用==来判断 但是比较2个地 ...

  3. BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心

    BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数 ...

  4. Java基础系列--基础排序算法

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9082138.html 一.概述 基础排序算法包括:桶排序.冒泡排序.选择排序.插入排序等 ...

  5. Django 项目搭建(ubuntu系统)

    1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...

  6. Mendeley使用小技巧

    合并重复论文 在导入论文时,可能出现新导入的一篇论文是自己之前看过的,但是可能因为某些原因,如来源不是同一个网址,arxiv 和 ICCV,两篇相同内容的文献同时存在. Mendeley 提供一个方法 ...

  7. 一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

    本篇文章,很浅显的一步步讲解如何搭建一个能运行的springcloud项目(带所有操作截图).相信!看完本篇之后,你会觉得springcloud搭建如此简单~~~~ 一. Eureka简介: 1.1  ...

  8. Spark学习之Spark SQL

    一.简介 Spark SQL 提供了以下三大功能. (1) Spark SQL 可以从各种结构化数据源(例如 JSON.Hive.Parquet 等)中读取数据. (2) Spark SQL 不仅支持 ...

  9. java爬虫,爬取当当网数据

     背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...

  10. 带着新人看java虚拟机02

    上一节是把大概的流程给过了一遍,但是还有很多地方没有说到,后续的慢慢会涉及到,敬请期待! 这次我们说说垃圾收集器,又名gc,顾名思义,就是收集垃圾的容器,那什么是垃圾呢?在我们这里指的就是堆中那些没人 ...