博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getattr的学习
阅读量:6588 次
发布时间:2019-06-24

本文共 1242 字,大约阅读时间需要 4 分钟。

getattr函数,可以得到一个直到运行时才知道名称的函数的应用。

>>> li = [ "Larry", "Curly" ]>>> li.pop
>>> getattr( li, "pop" )
>>> getattr( li, "append" )( "Moe" )>>> li['Larry', 'Curly', 'Moe']>>>

  从上面的代码可以看出 li.pop 等用于 getattr( li, "pop" ),但是这样不是调用pop函数,真正的

的调用是getattr( li, "append" )("Moe")。下面的例子是对getattr()所代表函数的参数的分析,可以

看出假如参数超过append的参数个数将会出错

>>> getattr( li, "append" )( "Moe1", "Moe2" )Traceback (most recent call last):  File "
", line 1, in
TypeError: append() takes exactly one argument (2 given)>>> get = getattr( li, "append" )>>> get( "Moe1" )>>> li['Larry', 'Curly', 'Moe', 'Moe1']>>>

  

具体问题:

以下是 stackoverflow上提出的一个问题

然后其中的一个用getattr的解答是:

class MyClass(object):    def install(self):          print "In install"method_name = 'install' # set by the command line optionsmy_cls = MyClass()method = getattr(my_cls, method_name)if not method:    raise Exception("Method %s not implemented" % method_name)method()

  

      从getattr这个问题可以看到python的一个很重要的功能自省。在《Dive into python》是这样介绍----“自省是指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。”

 

参考资料:

              stackoverflow 网站

              《Dive into python》

转载于:https://www.cnblogs.com/lxgeek/archive/2011/10/29/2228487.html

你可能感兴趣的文章
MSSQL发送邮件
查看>>
Newtonsoft 反序列化字符串
查看>>
java读写删.text,.xml文件内容
查看>>
[LeetCode] Course Schedule
查看>>
[LeetCode] Find Median from Data Stream
查看>>
Git学习笔记一《版本控制之道-使用Git》
查看>>
信息系统的管理
查看>>
利用@factory和@dataProvider实现参数化
查看>>
innodb_flush_log_at_trx_commit和sync_binlog参数详解
查看>>
wince BindingSource
查看>>
2.GET与POST的区别
查看>>
ArcGIS Engine中如何获取Map中已经选择的要素呢(转)
查看>>
Oracle报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录
查看>>
Rails secret token bug
查看>>
for of 与 for in的区别
查看>>
MySQL数据库 -- Navicat、pycharm连接数据库
查看>>
Unity 2D Touch Movement
查看>>
用一个URL加一个JAVA壳做成一个安卓应用
查看>>
奇葩属性:layout_weight 的解释及使用
查看>>
2015年最好的员工心态培养 -- 我们需要把简单的事情做到极致
查看>>