Python 高阶函数获取命名属性

  • Post category:Python

Python 高阶函数获取命名属性使用方法的完整攻略

高阶函数

在 Python 中,函数也可以作为另一个函数的参数进行传递,或是作为另一个函数的返回值,这种使用函数作为参数或返回值的函数被称为高阶函数。

获取命名属性

在 Python 中,常常需要查看对象的属性值,多个对象的属性相同时,可以使用函数来获取属性,再进行比较或计算。使用函数获取对象的属性时,需要使用 getattr 函数,该函数有两个参数,第一个参数是对象,第二个参数是属性名。

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person('Tom', 18)
attr_name = 'name'

print(getattr(p, attr_name))   # Tom

在上面的代码中,我们定义了一个 Person 类,该类包含一个名为 name 和一个名为 age 的属性。我们实例化一个 Person 对象,并将它的 name 属性值保存到一个字符串变量 attr_name 中。最后,我们使用 getattr 函数和 p 对象来获取 name 属性的值,并将其打印出来。

示例

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __lt__(self, other):
        return self.age < other.age

persons = [
    Person('Tom', 18),
    Person('Mary', 20),
    Person('John', 19)
]
attr_name = 'age'

result = sorted(persons, key=lambda p: getattr(p, attr_name))
for p in result:
    print(p.name, p.age)

在上面的代码中,我们定义了一个 Person 类,该类包含一个名为 name 和一个名为 age 的属性,还定义了一个内置函数 lt 来实现小于运算符。我们创建了一个 persons 列表,包含三个 Person 对象。我们将属性名 age 保存到一个字符串变量 attr_name 中,然后使用内置函数 sorted 对这个列表进行排序,排序时使用 lambda 表达式来获取对象的 age 属性值,并使用 getattr 函数获取属性值。最后,我们将排序后的结果打印出来。

另外,注意到在上面示例代码中,为了实现 < 运算符的功能,我们需要在 Person 类中自定义一个魔法方法 lt,这里就不从细节方面说明了,涉及到面向对象的相关知识,需要读者自行了解。