Python语言入门6.9-通过字符串访问类的方法
小标 2018-06-20 来源 : 阅读 714 评论 0

摘要:在Python语言入门中,我们想调用对象上的某一个方法,这个方法名保存在字符串中,我们想通过这个字符串来调用该方法。希望对大家学习Python语言入门有所帮助。

在Python语言入门中,我们想调用对象上的某一个方法,这个方法名保存在字符串中,我们想通过这个字符串来调用该方法。希望对大家学习Python语言入门有所帮助。

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语句或者访问者模式的变体中,以后在分享更加高级的访问者模式。

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程