python - 如何将函数动态添加到类并保留函数在类中返回的内容?
问题描述
fun
在我的包中,我有各种函数(我现在想创建一个可以收集函数返回 ( Collector
) 的类。我希望这些函数成为Collector
该类的方法,以便可以从其命名空间调用它们——虽然不是直接调用,而是通过我调用的子类调用run
。
因此,在使用时,collector.run.fun()
我想Collector
捕获 的输出,fun
以便它可用于(在Collector
的命名空间中)以进行进一步处理(例如,通过运行更多功能)。
如何动态地将函数添加到类中并保留它们在类中返回的内容?
这是一些代码。显然这是错误的 -setattr
只会附加fun
到Collector.run
......我不知道如何继续:
## package structure
## /my_pgk/module.py
## /my_pgk/sub/submodule.py
## many more like this in submodule.py:
def fun(add="default", **kwargs):
if "base" in kwargs:
add = kwargs.get("base") + " " + add
if "more" in kwargs:
add = add + " " + kwargs.get("more")
return add
## in module.py:
from sub import submodule
class Collector(object):
def __init__(self, base, **kwargs):
self.base = base
if "more" in kwargs and not kwargs.get("more") == "":
self.more = kwargs.get("more")
class run(object):
def __init__ (self):
## dyanmically add class methods (this is wrong)
for key, value in submodule.__dict__.items():
if callable(value) and not key.startswith('_'):
setattr(self, key, value)
self.run = run()
## ENTER SOME PYTHON MAGIC HERE THAT ALLOWS ME TO RUN FUNCTIONS AS
## CLASS METHODS AND CATCH THEIR OUTPUT FOR FURTHER PROCESSING:
## self.add = ...SOMEHOW CATCH METHOD OUTPUT...
## self.final = ", and ".join([self.base, self.add, self.more])
def out(self):
print(self.final)
## in practice:
col = Collector(base="(1) this is the start",
more="(3) even more is provided")
col.run.fun("(2) this is what I add")
col.out()
## should give
# (1) this is the start, and (2) this is what I add, and (3) even more is provided
解决方案
推荐阅读
- javascript - 如何在 React.js 中导入和使用 min.js 和 min.css?
- python - 每隔几秒钟从 python 中的 SQL 获取新数据的问题
- android - 在移动应用上存储 SAML 断言并将它们用于用户会话
- javascript - 在 React 中获取在线当前时间
- react-native - 使用 useState 反应原生表单
- r - 如何删除包含超过 2000 个 NA 值的所有列?
- angular - Angular - 迭代来自 Google Books API 的响应对象
- javascript - 使用单个坐标变量在 Google Maps JavaScript API 中选择中心
- r - 如何在R highcharter中反转多个y轴?
- javascript - 如何找到特定的数组属性 ejs