我可以将方法作为参数传递给python吗? 我想做一些事情,例如,如果任何东西都是具有foo方法的对象的实例:
def access_to(class=anything, method="foo"):
return class.method
(很明显,Anything实例没有属性“ method”,并且会得到AttributeError)。
答案 0 :(得分:4)
如果要从字符串参数获取方法,请使用getattr。
class A:
def foo(self):
print("foo")
def access_to(c, method="foo"):
return getattr(c, method)
a = A()
b = 5
access_to(a)()
access_to(b)()
它为a打印foo,然后为b生成错误
我不得不说,除非出于某些特殊原因,否则我不建议滥用此类功能。
答案 1 :(得分:0)
您当然可以将方法作为参数传递给Python中的函数。在下面的示例中,我创建了一个类(MyClass
),该类具有两种方法:isOdd
和filterArray
。我还在isEven
之外创建了MyClass
函数。 filterArray
接受两个参数-一个数组和一个返回True
或False
的函数-并使用作为参数传递的方法来过滤数组。
此外,您可以将lambda函数作为参数传递,就像在不编写函数声明的情况下动态创建函数一样。
def isEven(num):
return num % 2 == 0
class MyClass:
def isOdd(self, num):
return not isEven(num)
def filterArray(self, arr, method):
return [item for item in arr if method(item)]
myArr = list(range(10)) # [0, 1, 2, ... 9]
myClass = MyClass()
print(myClass.filterArray(myArr, isEven))
print(myClass.filterArray(myArr, myClass.isOdd))
print(myClass.filterArray(myArr, lambda x: x % 3 == 0))
输出:
[0, 2, 4, 6, 8]
[1, 3, 5, 7, 9]
[0, 3, 6, 9]