资讯专栏INFORMATION COLUMN

Python对类实例使用getattr

Youngs / 1358人阅读

摘要:在类成员函数中,可以这样用看上面的成员函数,也是同一个道理。如果像下面这样写的话,会出错报错信息就是这个基本上指明了原因。

在类的成员函数中,如果你想通过一个字符串(成员函数名)来调用类的成员函数,该怎么做?

class A:
    val = 1
    def __init__(self):
        pass

    def fun_1(self):
        print self.val
        print "in fun_1"

    def fun_2(self):
        print "in fun_2"

对于上面的类,你可以这样用

obj = A()
s = "fun_1"
fn = getattr(obj, s)
fn()

但是如果你传给getattr的第一个参数是对象名,那么就要这样用

obj = A()
s = "fun_1"
fn = getattr(A, s)
fn(obj)

相当于是fn只是一个函数名,需要一个调用参数,第一个参数就是self,也就是对象实例。
在类成员函数中,可以这样用

class A:
    val = 1
    def __init__(self):
        pass
    def control(self):
        name = "fun_1"
        fn = getattr(A, name)
        fn(self)
    def fun_1(self):
        print self.val
        print "in fun_1"
    def fun_2(self):
        print "in fun_2"

看上面的成员函数control,也是同一个道理。
如果像下面这样写的话,会出错

def control(self):
    name = "fun_1"
    fn = getattr(A, name)
    fn()

报错信息就是
TypeError: unbound method fun_1() must be called with A instance as first argument (got nothing instead)
这个基本上指明了原因。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38575.html

相关文章

  • Python中的类元编程

    摘要:类元编程是指在运行时创建或定制类的技艺。注意在中做元编程时最好不要用和函数。三元类基础知识元类是类元编程最高级的工具使用元类可以创建具有某种特质的全新变种,例如抽象基类。建议除非开发框架,否则不要在生产代码中定义元类或抽象基类。 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解运行时创建...

    alexnevsky 评论0 收藏0
  • SICP Python 描述 2.5 面向对象编程

    摘要:类似消息传递中的分发字典,对象响应行为请求。消息传递和点表达式方法定义在类中,而实例属性通常在构造器中赋值,二者都是面向对象编程的基本元素。使用带有内建对象系统语言的优点是,消息传递能够和其它语言特性,例如赋值语句无缝对接。 2.5 面向对象编程 来源:2.5 Object-Oriented Programming 译者:飞龙 协议:CC BY-NC-SA 4.0 面向对象编程...

    starsfun 评论0 收藏0
  • [译] 属性访问、特性和描述符 2

    摘要:不像其他属性,描述符在类级别上创建。当所有者类被定义时,每个描述符对象都是被绑定到一个不同的类级别属性的描述符类实例。这必须返回描述符的值。此外,描述符对有一个方便的响应和请求格式。 注:原书作者 Steven F. Lott,原书名为 Mastering Object-oriented Python __getattribute__()方法 __getattribute__()方法是...

    CloudwiseAPM 评论0 收藏0
  • Python中的动态属性和特性

    摘要:一利用动态属性处理数据源属性在中,数据的属性和处理数据的方法统称属性。处理无效属性名在中,由于关键字被保留,名称为关键字的属性是无效的。内置函数列出对象的大多数属性。点号和内置函数会触发这个方法。 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解如何利用动态属性处理数据;2、掌握Pyth...

    scola666 评论0 收藏0
  • Python中几种属性访问的区别

    摘要:起步的提供一系列和属性访问有关的特殊方法。本文阐述它们的区别和用法。属性的访问机制一般情况下,属性访问的默认行为是从对象的字典中获取,并当获取不到时会沿着一定的查找链进行查找。则这个类的对象称为描述符。 起步 python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__ 。本文阐述它们的区别和用...

    zhouzhou 评论0 收藏0

发表评论

0条评论

Youngs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<