首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用类作为包装器吗?

我应该使用类作为包装器吗?
EN

Software Engineering用户
提问于 2014-12-01 07:55:10
回答 1查看 756关注 0票数 0

假设我有一个代表化学化合物的类

代码语言:javascript
复制
class Compound(networkx.Graph): 

    def __init__(self):
        super(Compound, self).__init__()

让我说,我想在化学化合物上增加一些额外的功能。它应该是从化合物继承下来的。但是用它作为化合物的包装可以吗?例如

代码语言:javascript
复制
class Acid(Compound):

    def __init__(self, compound, *other_data):
        self.__dict__.update(compound.__dict__)

基本上,这个类只具有指向底层类的指针,然后让我添加功能,而不必复制东西。这有道理吗?这合理吗?我做得对吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-12-01 08:42:41

在这种情况下,您可能应该使用继承,但是包装要扩展的对象也很好。实际上,该技术非常有用,可以有一个名称:装饰图案

在Python中转发所有调用的通常方法不是处理__dict__,而是重写__getattr__ (“显式比隐式好”):

代码语言:javascript
复制
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的名称。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/264202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档