• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python中的内置函数getattr()介绍及示例

python中的内置函数getattr()介绍及示例

作者:hebedich 字体:[增加 减小] 来源:互联网

hebedich 通过本文主要向大家介绍了python getattr函数,python getattr,python中getattr,getattr函数,getattr等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在python的官方文档中:getattr()的解释如下:

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.
</div>

根据属性名称返回对象值。如果“name”是对对象属性的名称,则返回对应属性的值。

'# -*- 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')
</div>

 这段代码执行的结果是:

getattr(self,'name') equals to self.name 
lucas
lucas
attribute1 is indirectly called by fun()
<type 'instancemethod'>
attribute1 called and crown is passed in as a parameter
attrribute1 is directly called
attribute1 called and tomato is passed in as a parameter

Process finished with exit code 0
</div>

第一个函数tryattribute0()非常好理解,就如同定义里说的一样。第二个函数tryattribute1()就有一点费解了。其实原理并不复杂,我们看到fun的type是 instancemethod,这里你可以认为:对于函数,getattr()的返回值是一个指针,指针赋值给接受它的变量,以后call这个变量就等于调用变量指向的函数。

原理我们知道了,那getattr的作用是什么呢?

你熟悉java或者c#中的反射么?反射的一个重要作用就是延迟加载,这样可以解耦,这样可以让系统运行的更有效率。作为动态语言,python显然在这方面要更加强大,

getattr()就是实现python反射的一块积木,结合其它方法如setattr(),dir() 等,我们可以做出很多有趣的事情。

我们看以下场景:

1.我需要在一个类中动态添加其它类中有的方法:

#如果类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())
</div>

我们只需要:

a = A()

b = B()

a.addnewattributesfromotherclass(b)
</div>

这样a就可以调用B中的'非私有'方法啦。

</div>

您可能想查找下面的文章:

  • 浅谈python中的getattr函数 hasattr函数
  • Python中getattr函数和hasattr函数作用详解
  • 详解Python中 __get__和__getattr__和__getattribute__的区别
  • 浅谈python中的getattr函数 hasattr函数
  • Python中getattr函数和hasattr函数作用详解
  • python中的内置函数getattr()介绍及示例
  • python中getattr函数使用方法 getattr实现工厂模式
  • Python __getattr__与__setattr__使用方法

相关文章

  • python通过ftplib登录到ftp服务器的方法
  • Windows和Linux下使用Python访问SqlServer的方法介绍
  • python利用不到一百行代码实现一个小siri
  • python 中文乱码问题深入分析
  • python wav模块获取采样率 采样点声道量化位数(实例代码)
  • Python 文件重命名工具代码
  • python获取指定路径下所有指定后缀文件的方法
  • Python使用django获取用户IP地址的方法
  • Python httplib,smtplib使用方法
  • python中pycurl库的用法实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 讲解Python中的递归函数
    • 在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
    • python中的reduce内建函数使用方法指南
    • 在win和Linux系统中python命令行运行的不同
    • 在arcgis使用python脚本进行字段计算时是如何解决中文问题的
    • Python实现二分查找算法实例
    • python笔记(2)
    • Python版的文曲星猜数字游戏代码
    • Python实现命令行通讯录实例教程
    • 一些Python中的二维数组的操作方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有