使用对象 属性 作为 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)
我有一个深度优先搜索算法,它从 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)