假设我有一个代表化学化合物的类
class Compound(networkx.Graph):
def __init__(self):
super(Compound, self).__init__()让我说,我想在化学化合物上增加一些额外的功能。它应该是从化合物继承下来的。但是用它作为化合物的包装可以吗?例如
class Acid(Compound):
def __init__(self, compound, *other_data):
self.__dict__.update(compound.__dict__)基本上,这个类只具有指向底层类的指针,然后让我添加功能,而不必复制东西。这有道理吗?这合理吗?我做得对吗?
发布于 2014-12-01 08:42:41
在这种情况下,您可能应该使用继承,但是包装要扩展的对象也很好。实际上,该技术非常有用,可以有一个名称:装饰图案。
在Python中转发所有调用的通常方法不是处理__dict__,而是重写__getattr__ (“显式比隐式好”):
class A(object):
def __init__(self, *args, **kwargs):
self._b = B(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._b, name)__getattr__只在没有按照通常的方式找到名称时才触发,因此您可以自由地在A中添加或覆盖您不希望被转发给B的名称。
https://softwareengineering.stackexchange.com/questions/264202
复制相似问题