如何解决如何动态地向类添加函数并保留函数在类中返回的内容?
在我的包中,我有各种函数 (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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。