首页 > 其他 > 详细

在对象上调用以字符串作为名称的方法

时间:2020-01-07 00:42:27      阅读:147      评论:0      收藏:0      [点我收藏+]

调用对象的方法,一般分为两步,首先查找对象的属性中是否包含该方法名称,然后是调用函数。
对于简单的情形,可以使用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)

另一个方案是使用operator模块的methodcaller()函数,如下:

import operator
operator.methodcaller('distance', 0, 0)(p)

如果要按名称查找方法并一次又一次地提供相同的参数,operator.methodcaller()可能会很有用。如下:

points = [Point(1, 2), Point(3, 0), Point(10, -3), Point(-5, -7), Point(-1, 8), Point(3, 2)]

# Sort by distance from origin (0, 0)
points.sort(key=operator.methodcaller('distance', 0, 0))

调用方法实际上是两个单独的步骤,涉及属性查找和函数调用。 因此,要调用方法,只需使用getattr()查找属性,就如同其他任何属性一样。 要将结果作为方法调用,只需将查找结果视为函数。

在对象上调用以字符串作为名称的方法

原文:https://www.cnblogs.com/jeffrey-yang/p/12159050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!