python中的内置函数getattr()介绍及示例
在python的官方文档中:getattr()的解释如下:
|
1
2
3
|
getattr(object, name[, default])Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object's attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised. |
根据属性名称返回对象值。如果“name”是对对象属性的名称,则返回对应属性的值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
'# -*- coding: utf-8 -*-'__author__ = 'lucas'class attrtest(object): def __init__(self): pass def trygetattr0(self): self.name = 'lucas' print self.name #equals to self.name print getattr(self,'name') def attribute1(self,para1): print 'attribute1 called and '+ para1+' is passed in as a parameter' def trygetattr(self): fun = getattr(self,'attribute1') print type(fun) fun('crown')if __name__=='__main__': test = attrtest() print 'getattr(self,\'name\') equals to self.name ' test.trygetattr0() print 'attribute1 is indirectly called by fun()' test.trygetattr() print 'attrribute1 is directly called' test.attribute1('tomato') |
这段代码执行的结果是:
|
1
2
3
4
5
6
7
8
9
10
|
getattr(self,'name') equals to self.name lucaslucasattribute1 is indirectly called by fun()<type 'instancemethod'>attribute1 called and crown is passed in as a parameterattrribute1 is directly calledattribute1 called and tomato is passed in as a parameterProcess finished with exit code 0 |
第一个函数tryattribute0()非常好理解,就如同定义里说的一样。第二个函数tryattribute1()就有一点费解了。其实原理并不复杂,我们看到fun的type是 instancemethod,这里你可以认为:对于函数,getattr()的返回值是一个指针,指针赋值给接受它的变量,以后call这个变量就等于调用变量指向的函数。
原理我们知道了,那getattr的作用是什么呢?
你熟悉java或者c#中的反射么?反射的一个重要作用就是延迟加载,这样可以解耦,这样可以让系统运行的更有效率。作为动态语言,python显然在这方面要更加强大,
getattr()就是实现python反射的一块积木,结合其它方法如setattr(),dir() 等,我们可以做出很多有趣的事情。
我们看以下场景:
1.我需要在一个类中动态添加其它类中有的方法:
|
1
2
3
4
5
6
7
|
#如果类A中有如下方法:def addnewattributesfromotherclass(self,class_name): func_names = dir(class_name) for func_name in func_names: if not func_name.startswith('_'): new_func = getattr(class_name,func_name) self.__setattr__(func_name,new_func()) |
我们只需要:
|
1
2
3
4
5
|
a = A()b = B()a.addnewattributesfromotherclass(b) |
这样a就可以调用B中的'非私有'方法啦。
python中的内置函数getattr()介绍及示例的更多相关文章
- python中的内置函数getattr()
在python的官方文档中:getattr()的解释如下: getattr(object, name[, default]) Return the value of the named attribu ...
- python中一些内置函数实例
lambda表达式 简单函数可用lambda表达式 1. def f1() return(123) r1=f1() print() 2. f2=lambda:123 r2=f2() print() 以 ...
- python中的内置函数(一)
内置函数:内置函数就是python提供的,可以拿来直接用的函数 作用域相关 locals():返回当前作用域中的名字globals():返回全局作用域中的内容 def func(): print('我 ...
- Python中的内置函数__init__()的理解
有点意思,本来我是学习java的.总所周知,java也有构造函数,而python在面向对象的概念中,也有构造函数.它就是 __init__(self) 方法. 其实类似于__init__()这种方法, ...
- python中的内置函数,递归,递归文件显示(二),二分法
1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...
- python中的内置函数(一), lambda, filter, map
https://www.processon.com/view/link/5c10da0ce4b099ae3e137bf6 1.内置函数 内置函数就是python中提供的,可以直接拿来用的函数,比如pr ...
- python中的内置函数(2)
一.lambda匿名函数定义:为了解决一些简单的需求而设计的一句话函数例子:计算n的n次方 def func(n):#正常的写法 return n**2 f=lambda n:n**2 这里的lamb ...
- 2018.8.14 python中的内置函数(68个)
主要内容: python中68个内置函数的功能及使用方法
- python学习之【第十篇】:Python中的内置函数
1.前言 内置函数,就是Python内部预先定义好的函数,可以直接使用,Python中内置函数有以下这么多个: 2.map() 描述: map() 会根据提供的函数对指定序列做映射.第一个参数 fun ...
随机推荐
- 【转载】JVM 学习——垃圾收集器与内存分配策略
本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collectio ...
- 处理npm publish报错问题
上传项目到npm-->为社会做贡献 首先你得有一个项目 npm init 生成package.json 来设置相信息 注册登录npm:npm adduser 输入你的一些信息 查看当前npm登录 ...
- Java——ping & telnet实现
ping & telnet 实现类: import org.springframework.data.web.JsonPath; import java.io.IOException; imp ...
- Bate冲刺 第四天
1.各个成员今日完成的任务及对项目的贡献小时数 姓名 今日已完成任务 时间 马玉婷 特殊字符测试与完善 5h 马美玲 菜单栏测试与完善 5h 益西卓嘎 撰写博文 1h 2. 提供当天站立式会议照片一张 ...
- 前端开发需要掌握的SEO的知识点
SEO 工作的目的 seo 的工作目的是为了让网站更利于让各大搜索引擎抓取和收录,增加产品的曝光率. SEO 注意事项 1. 网站 TDK 标签的设置.title,description,keywor ...
- (6)tcp-socket
(1)client端口: import socket# 产生一个socket对象sk = socket.socket()# 建立连接sk.connect( ("127.0.0.1" ...
- form表单js提交
form表单js提交 $('#form1').submit(); 延迟form表单提交 function submitcheck() { $('#light').css('display', ...
- Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
题意:有n个串,询问每个串有多少子串在n个串中出现了至少k次. 题解:sam,每个节点开一个set维护该节点的字符串有哪几个串,启发式合并set,然后在sam上走一遍该串,对于每个可行的串,所有的fa ...
- 自己常用vs code 插件
subline 快捷键配置插件 Auto Close Tag — 自动闭合HTML标签 Auto Rename Tag — 修改HTML标签时,自动修改匹配的标签 background — 背景 ...
- TPS,并发用户数,吞吐量以及一些计算公式
TPS,并发用户数,吞吐量以及一些计算公式 基本概念 TPS:每秒同时处理的请求数/事务数 并发数:系统同时处理的请求数/事务数 响应时间:一般去平均响应时间,只有当方差过大时,去90%的响应时间值 ...