Python - 调用存储在字典中的对象的函数
Python - Call a function of an object which is stored in a dict
我有一个 Class 可以创建包含函数字典的对象。这些函数在 class.
中定义
class Foo:
def __init__(self, name, functions):
self.name = name
self.functions = functions
def myFunction1(self):
print self.name
return 'foo'
def myFunction2(self):
return 'bar'
在另一个文件中,我实例化了前一个 class 的对象,我想 运行 字典中的一个函数。
from foo import Foo
myFunctions = Foo.('a name', {0 : Foo.myFunction1, 1 : Foo.myFunction2})
myFunctions.functions[0]()
我有这个错误:
类型错误:必须使用 Foo 实例作为第一个参数调用未绑定方法 myFunction1()。
我知道当我执行最后一行时,我只是调用函数而不用 Foo 对象作为第一个参数调用它。但是我不能这样写:
myFunctions.myFunctions.functions[0]()
如何调用存储在字典属性中的 class 函数?
你可以像这样像字典一样调用函数:
tmp = Foo()
tmp.functions={0:tmp.myFunction1, 1:tmp.myFunction2}
myFunctions = tmp.functions
print myFunctions.functions[0]()
如果您需要一个对象方法,最好的方法是编写另一个函数来调用正确的函数
class Foo:
def __init__(self, functions):
self.functions = functions
def myFunction1(self):
return 'foo'
def myFunction2(self):
return 'bar'
def run_func(self, func_key, *args, **kwargs):
func_name = self.functions.get(func_key)
if func_name and hasattr(self, func_name):
return getattr(self, func_name)(*args, **kwargs)
else:
return None
fun_dict = {0:'myFunction1', 1:'myFunction2'}
a = Foo(fun_dict)
print a.run_func(0)
你甚至可以用这种方式发送参数。
def myFunction1(self, name):
return name
print a.run_func(0, "test")
这将通过 myFunction1
打印 test
我不太明白你想用这个函数字典实现什么,但请注意 instance.function()
等同于 Class.function(instance)
。在前者中,instance
作为 self
参数隐式传递;在后者中,您显式传递它。
因此,您可以尝试以下方法。
foo = Foo({0 : Foo.myFunction1, 1 : Foo.myFunction2})
print foo.functions[0](foo)
下面是最简单的功能切换方式:
dict = {0 : Foo.myFunction1(), 1 : Foo.myFunction2()}
function = fn_dict.get(0)
function()
我有一个 Class 可以创建包含函数字典的对象。这些函数在 class.
中定义class Foo:
def __init__(self, name, functions):
self.name = name
self.functions = functions
def myFunction1(self):
print self.name
return 'foo'
def myFunction2(self):
return 'bar'
在另一个文件中,我实例化了前一个 class 的对象,我想 运行 字典中的一个函数。
from foo import Foo
myFunctions = Foo.('a name', {0 : Foo.myFunction1, 1 : Foo.myFunction2})
myFunctions.functions[0]()
我有这个错误: 类型错误:必须使用 Foo 实例作为第一个参数调用未绑定方法 myFunction1()。
我知道当我执行最后一行时,我只是调用函数而不用 Foo 对象作为第一个参数调用它。但是我不能这样写:
myFunctions.myFunctions.functions[0]()
如何调用存储在字典属性中的 class 函数?
你可以像这样像字典一样调用函数:
tmp = Foo()
tmp.functions={0:tmp.myFunction1, 1:tmp.myFunction2}
myFunctions = tmp.functions
print myFunctions.functions[0]()
如果您需要一个对象方法,最好的方法是编写另一个函数来调用正确的函数
class Foo:
def __init__(self, functions):
self.functions = functions
def myFunction1(self):
return 'foo'
def myFunction2(self):
return 'bar'
def run_func(self, func_key, *args, **kwargs):
func_name = self.functions.get(func_key)
if func_name and hasattr(self, func_name):
return getattr(self, func_name)(*args, **kwargs)
else:
return None
fun_dict = {0:'myFunction1', 1:'myFunction2'}
a = Foo(fun_dict)
print a.run_func(0)
你甚至可以用这种方式发送参数。
def myFunction1(self, name):
return name
print a.run_func(0, "test")
这将通过 myFunction1
打印test
我不太明白你想用这个函数字典实现什么,但请注意 instance.function()
等同于 Class.function(instance)
。在前者中,instance
作为 self
参数隐式传递;在后者中,您显式传递它。
因此,您可以尝试以下方法。
foo = Foo({0 : Foo.myFunction1, 1 : Foo.myFunction2})
print foo.functions[0](foo)
下面是最简单的功能切换方式:
dict = {0 : Foo.myFunction1(), 1 : Foo.myFunction2()}
function = fn_dict.get(0)
function()