首页 > 解决方案 > 在 Python 3 中使用对象属性作为参数

问题描述

我有一个深度优先搜索算法,它从本体中提取信息。

我有一个工作函数来获取具有特定属性的所有对象,但是,我基本上需要为不同的属性做同样的事情。

例如,如果我有这两个简化的功能

def a():
    for n in nodes:
        do something with n.property1

def b():
    for n in nodes:
        do something with n.property2

有没有办法可以将所需的属性作为参数传递?所以我最终得到:

def a(property):
    for n in nodes:
        do something with n.property

a(property1)
a(property2)

标签: pythonpython-3.xparametersredundancy

解决方案


从技术上讲,是的。getattr()是一个内置函数,允许您根据对象的名称从对象中获取属性。setattr()也存在,并且可用于根据属性的名称从对象为属性分配值。

def a(propertyname):  # pass property name as a string
    for n in nodes:
        do something with getattr(n, propertyname)

a('property1')
a('property2')

但是,这通常被认为有点冒险,并且最好以没有必要的方式构造代码。例如,可以使用 lambdas 代替:

def a(getter):
    # pass a function that returns the value of the relevant parameter
    for n in nodes:
        do something with getter()

a(lambda n:n.property1)
b(lambda n:n.property2)

推荐阅读