通过继承将方法添加到内置类中:如何初始化?

时间:2019-05-09 15:40:05

标签: python inheritance initialization subclass built-in

问题

我目前正在使用决策树,我想向内置的python类sklearn.tree._tree.Tree中添加一些方法,例如,一种方法可以计算两个样本的公共节点数。

假设我们有A类,它是内置的python类。我有对象a。我想将方法​​添加到对象a,所以我创建了一个类B,该类继承自A。但是,然后,我想使用 b来初始化a ,而不要引用__init__的{​​{1}}方法。

背景

我看到我所寻找的主要是两种解决方案:

  • 所谓的“ monkeypatching”,但除了被认为是邪恶的以外,它还不能在C实现的内置python类中使用。
  • 子类化,方法是使一个新类继承自另一个类。 这就是我一直在尝试的方法

我也看到了或多或少复杂的解决方案,它们复制了对象的字典,或者改变了主类的A属性。

当然,我可以简单地定义一个新类__class__,该类将B作为属性。但是我不认为将来的支持会令人满意吗?尽管如此,我已经搜索了很长时间,并且很好奇我的问题是否有很好的python解决方案。

代码示例

a

解决方案和解决方法

如果这根本不可能,我将很高兴知道为什么。在那种情况下,我最终会得到类似的东西;

type(a)  # class A

class B(A):

    def __init__(self, a:A):
        # Making my b object having the attribute of a

    def new_method():
        ...

b.attribute_of_A  # Should work
b.new_method()  # Should work too

0 个答案:

没有答案