如何从 class 中的对象调用函数?
How to call a function from an object within a class?
代码段。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne(),
"item two": self.functionTwo()
}
self.__handler()
def __handler(self):
for item in items:
if item in self.myObj.keys():
self.myObj[item]
def functionOne(self):
# do stuff
def functionTwo(self):
# do stuff
问题。 我试图在不使用 if 语句的情况下调用正确的函数。 运行 此代码的结果是:functionX 采用 0 个位置参数,但给出了 1 个。
期望的结束状态。 在 class 内部使用对象调用正确的函数。或指导是否有更好的方法来完成此任务。
大图。 我希望通过的项目计数会定期更改。我想确保我的处理程序可以在不修改现有代码的情况下管理增加或减少(在 myObj 的范围内)。
备用计划。 万一我想要完成的事情是不可能的,我正在考虑将 class foo 导入更高级别 class 调用富。然后传递一个已经映射了函数的对象。如果有人可以阐明这个替代方案,以防我想要的最终状态是不可能的。
编辑。
- 忘记在构造函数中添加处理程序调用。
- 更正了缩进和函数定义。
- 添加了评论解决方案(感谢 kpie)。
kpie 的解决方案。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne, # removed () from original
"item two": self.functionTwo # removed () from original
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]() # added () from original
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"]) # example test (1) item, output: bar
foo(["item two","item one"]) # example test (2) items, output: baz, bar
没有什么可以阻止您将函数存储在字典中以供查找。这是一个显示正确语法的示例。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne,
"item two": self.functionTwo
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]()
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"])
foo(["item two","item one"])
打印:
bar
baz
bar
代码段。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne(),
"item two": self.functionTwo()
}
self.__handler()
def __handler(self):
for item in items:
if item in self.myObj.keys():
self.myObj[item]
def functionOne(self):
# do stuff
def functionTwo(self):
# do stuff
问题。 我试图在不使用 if 语句的情况下调用正确的函数。 运行 此代码的结果是:functionX 采用 0 个位置参数,但给出了 1 个。
期望的结束状态。 在 class 内部使用对象调用正确的函数。或指导是否有更好的方法来完成此任务。
大图。 我希望通过的项目计数会定期更改。我想确保我的处理程序可以在不修改现有代码的情况下管理增加或减少(在 myObj 的范围内)。
备用计划。 万一我想要完成的事情是不可能的,我正在考虑将 class foo 导入更高级别 class 调用富。然后传递一个已经映射了函数的对象。如果有人可以阐明这个替代方案,以防我想要的最终状态是不可能的。
编辑。
- 忘记在构造函数中添加处理程序调用。
- 更正了缩进和函数定义。
- 添加了评论解决方案(感谢 kpie)。
kpie 的解决方案。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne, # removed () from original
"item two": self.functionTwo # removed () from original
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]() # added () from original
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"]) # example test (1) item, output: bar
foo(["item two","item one"]) # example test (2) items, output: baz, bar
没有什么可以阻止您将函数存储在字典中以供查找。这是一个显示正确语法的示例。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne,
"item two": self.functionTwo
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]()
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"])
foo(["item two","item one"])
打印:
bar
baz
bar