将方法附加到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的一些我不太熟悉的更高级的特性来最好地处理这种分层类结构