使用对象 属性 作为 Python 中的参数 3

Using an object property as a parameter in Python 3

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

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

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

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)

您可以执行以下操作:

def a(property):
   ...
   print(getattr(n, property))

并使用字符串参数调用此方法:

a("property1")
a("property2")

从技术上讲,是的。 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')

但是,这通常被认为有点冒险,最好以不必要的方式构建代码。例如,可以改用 lambda:

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)