getattr(object, name[, default])

class Student(object):

def __init__(self):

self.name = 'Michael'

def __getattr__(self,attr):

return attr

s = Student()

s.name

--> 'Michael'

s.score

--> 'score'

_getattr__是python里的一个内建函数,动态返回一个属性

当调用不存在的属性时,Python会试图调用__getattr__(self,'score')来获取属性,并且返回score

__str__用于打印函数

__call__把类当做类似函数一样调用

代码执行流程:

Chain()创建一个实例,并且 path初始默认为 "" ,Chain().a 时,类中并没有 a 属性,Python解析器调用 getattr函数 --> __getattr__(self,path='a'),

并返回一个Chain实例,然后把/a 赋值gei path 传入,继续b,因为同样没有b 属性,执行getattr函数,将/a/b传入,

然后.user(“Michael”),先会执行getattr返回Chain实例,但是因为有()括号在,所以返回的是Chain(),

这个就会调用call函数了,然后把“ChenTian”作为path传入,然后call函数就返回了/a/b/user/ChenTian,剩下的类同。

.user("Michael”) 刚开始的user被getattr函数捕获,并返回Chain(),然后再执行__call__来调用 "Michael"

python getattr用法_python3,定制类,getattr相关用法相关推荐

  1. python hasattr函数_Python3 hasattr()、getattr()、setattr()函数简介

    Python3 hasattr().getattr().setattr()函数简介 一.hasattr(object, name) 判断object对象中是否存在name属性,当然对于python的对 ...

  2. python简单定义_python定义类的简单用法

    python定义的类使用方法: 使用"obj=类名()"语句将类实例化,然后用"obj.函数名"就可以调用类里面定义的各种函数了 示例如下: 将Bili类实例化 ...

  3. Python day 9(3) 定制类

    一:__str__(返回用户友好的输出) 1 >>> class Student(object): 2 ... def __init__(self, name): 3 ... sel ...

  4. Python 面向对象高级编程——定制类

    1.1   定制类 1.1.1   __str__ >>> class Student(object): ...    def __init__(self, name): ...   ...

  5. python中sorted函数的用法_Python3 中sorted() 函数的用法

    描述 sorted() 函数对所有可迭代的对象进行排序操作. 语法 sorted(iterable, key=None, reverse=False) iterable – 可迭代对象. key – ...

  6. 【廖雪峰python进阶笔记】定制类

    1. __str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object):def __init__(self, nam ...

  7. python print函数用法_Python3.2中Print函数用法实例详解

    本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...

  8. 【Python面向对象进阶④】——定制类

    Python中的魔法方法 @ author: Flyme awei 方法名 说明 __str__ 用于返回对象的描述 __iter__ 使类可以迭代 __getitem__ 按照下标获取类元素,例如l ...

  9. python shelve模块_python3 shelve模块的实例用法讲解

    python3 shelve模块的详解 python3 shelve模块的详解 一.简介 在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数 ...

  10. python syslog服务器_Python3+syslog使用及相关说明

    一.说明 1.1 背景说明 syslog这个东西,最早接触是在Z公司做基线安全加固的时候有启用远程日志服务器一项,然后当时还写整理了一篇"rsyslog+loganalyzer远程日志系统搭 ...

最新文章

  1. 【路径规划】Astart算法——图文直观解析
  2. Json在线格式化站点
  3. C++ 输入字符串和string 类型总结
  4. php 实体转html,PHP 转HTML标签为实体, 把实体html标签转为,过滤html标签 | 学步园...
  5. 腾讯初探AI+农业 获国际AI温室种植大赛亚军
  6. Mock server的实现 - run Fiori application using mock data in offline mode
  7. Phoenix报错(6)Inconsistent namespace mapping properites
  8. Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config
  9. BP神经网络的MATLAB实现
  10. html 背景区域设置,HTML5 背景的显示区域实现
  11. Mysql关键字 (MySQL 5.1参考手册)
  12. 显卡刷bios改型号_A卡修改BIOS软件/刷显卡BIOS软件
  13. 防御SQL注入的方法总结
  14. 怎么设置计算机语言中文,Windows10 IE11浏览器怎么把默认语言设置为中文
  15. Latex 同时使用中英文双语图表名称(中英文双标题)+更改图表冒号为空格
  16. 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
  17. java计算机毕业设计钢材出入库管理系统(附源码、数据库)
  18. 【多媒体】多媒体架构
  19. 快速寻找研究方向+发文章的方法!!按头安利!
  20. 代码生成MANIFEST.MF文件

热门文章

  1. 十八.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
  2. 小记:iOS 中一般对于 view 不依赖 model 的的两种代码书写形式
  3. Keras源码下载记录
  4. Markdown示例
  5. webpack模块定义和使用的模式
  6. perl中的文件句柄
  7. 直指Adobe的龌龊行径
  8. [转载] Python内置函数-min函数和max函数-详解
  9. [转载] Python中不可变集合的使用frozenset()方法
  10. tornado框架基础05-模板继承、UImodul和UImethods