前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习笔记6.9-通过字符串访问类的方法

python学习笔记6.9-通过字符串访问类的方法

作者头像
锦小年
发布2018-01-02 14:28:46
1K0
发布2018-01-02 14:28:46
举报

我们想调用对象上的某一个方法,这个方法名保存在字符串中,我们想通过这个字符串来调用该方法。

1 使用getattr()

import math

class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __repr__(self):
        return 'Point({!r:},{!r:}'.format(self.x, self.y)

    def distance(self,x,y):
        return math.hypot(self.x-x, self.y-y)

p = Point(2, 3)

d = getattr(p, 'distance')(0, 0)

通过getattr()就可以寻找到相关方法并返回该方法,直接用就可以

2 使用operator.methodcaller()

import operator
d = operator.methodcaller('distance', 0, 0)(p)
print(d)

同样也达到了我们想要的结果。

如果想通过名称来查询方法并提供同样的参数反复调用该方法,那么operator.methodcaller()是很有用的。

points = [Point(12,5),Point(3,4),Point(6,9)]
print(points)

points.sort(key=operator.methodcaller('distance',0,0))
print(points)

调用一个方法实际上涉及到两个单独的步骤,一个时查询属性,一个时函数调用,因此要调用一个方法,可以使用getattr()来查询相应的方法,只要把查询到的方法当做函数使用就好。 与getattr()不同的是,operator.methodcaller()创建了一个可以调用的方法,我们需要为其提供相应的self参数,也就是相应的对象的实例就可以直接使用。

通过包含在字符串中的名称来调用方法,这种方式常出现在需要模拟case语句或者访问者模式的变体中,以后在分享更加高级的访问者模式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 使用getattr()
  • 2 使用operator.methodcaller()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档