【问题标题】:Autogenerate wrapper classes in Python在 Python 中自动生成包装类
【发布时间】:2016-11-19 20:00:41
【问题描述】:

我在一个几乎所有类都是不可继承的库上做了很多工作,但我想扩展它们。

假设 A 类是不可继承的。我经常通过将self._obj 存储为属性来创建“包装器”类,然后手动实现所有方法和所有属性(使用@property)来执行某些行为,然后再在_obj 上调用相同的方法。 Here's an example.

有没有更好的方法来扩展不可继承的类,或者至少有某种方法可以自动化这个繁琐的过程?

【问题讨论】:

    标签: python python-3.x inheritance wrapper


    【解决方案1】:

    是的:只需定义__getattr__ 即可在self._cell 上查找属性。

    【讨论】:

    • 如果我想添加到现有方法中,这将如何工作?我是否以旧方式实施这些?另外,那些可以写的属性我需要__setattr__吗?
    • 你能举一个“添加到现有方法”的例子吗?
    • 我包装的一些属性我正在使用@property.setter。请参阅 GitHub 上的链接文件。
    • @LukeTaylor Daniel 建议将以下方法添加到您的包装器中:def __getattr__(self, name): return getattr(self._cell, name)def __setattr__(self, name, value): return setattr(self._cell, name, value)
    • @Frodon 我知道。不过还是感谢您的澄清。
    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2012-03-02
    • 2018-10-29
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多