将方法附加到Python中封装在其他对象中的现有对象
下面是我正在处理的类结构示例:将方法附加到Python中封装在其他对象中的现有对象,python,hierarchy,python-decorators,Python,Hierarchy,Python Decorators,下面是我正在处理的类结构示例: ## # Classes in module::hierarchy (outside of my control) ## class TopLevelClass: def __init__(self, args): self.containedObjects = {} ... def gather_contained_objects(src): self.containedObjects = par
##
# Classes in module::hierarchy (outside of my control)
##
class TopLevelClass:
def __init__(self, args):
self.containedObjects = {}
...
def gather_contained_objects(src):
self.containedObjects = parse_source(src)
...
class ContainedClass:
def __init__(self, args):
self.furtherContainedObjects = {}
...
def gather_further_contained_objects(src):
self.furtherContainedObjects = parse_another_source(src)
...
... And so on.
##
# In my application,
##
import hierarchy
mydata = hierarchy.complexParsingFunction(data_src)
for c_names, c_obj in mydata.containedObjects.items():
for fc_names, fc_obj in c_obj.furtherContainedObjects.items():
if fc_name == "I_WANT_THIS_ONE":
print len(fc_obj.evenDeeperContainedObjects)
...
我面临一个问题,现有对象绑定一个特定的方法将非常有意义。我无法修改类定义,并且从中生成子类将毫无帮助,因为它的初始化发生在封装类(层次结构)的初始化内部。我知道Python确实允许使用类型中的MethodType函数将函数绑定到实例(请参阅:)。但是,这意味着我必须将我的函数绑定到每个实例。我宁愿不要在需要子类对象的地方重新实现complexparsing函数。所以我想听听你在这种情况下会怎么做
##
# What I would like to do is something on the lines of:
##
@magical_association
class derivedContainedClass(ContainedClass):
def get_certain_derived_data(self):
...
return desired_data
...
for c_name, c_obj in mydata.containedObjects.items():
print c_name, c_obj.get_certian_derived_data()
...
##
# And I really just want to see if I can do this without using
# a simple wrapper function.
##
def get_certain_derived_data(d, cname):
x = d.containedObjects[cname]
...
return desired_data
这并不是说我不能只做包装器,而是更多地探索了如何使用Python的一些我不太熟悉的更高级的特性来最好地处理这种分层类结构