超级__str__没有被调用

时间:2016-04-26 08:24:58

标签: python oop scikit-learn

我继承from sklearn.ensemble import RandomForestClassifier,我试图打印新的估算工具:

class my_rf(RandomForestClassifier):
    def __str__(self):
        return "foo_" + RandomForestClassifier.__str__(self) 

给出foo_my_rf()

我也尝试过:

class my_rf(RandomForestClassifier):
    def __str__(self):
        return "foo_" + super(RandomForestClassifier, self).__str__() 

具有相同的结果。期望是非常像sklearn默认行为:

>>> a = RandomForestClassifier()
>>> print a
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
        max_depth=None, max_features='auto', max_leaf_nodes=None,
        min_samples_leaf=1, min_samples_split=2,
        min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
        oob_score=False, random_state=None, verbose=0,
        warm_start=False)
>>>

这也是我使用print a.__str__()时的结果。

我错过了什么? 谢谢。

How do I change the string representation of a Python class?

相关

1 个答案:

答案 0 :(得分:0)

RandomForestClassifier __repr____str__中,查找从(self)调用的实例类的名称。您应该直接引用超类的名称。

更新这是你如何获得所需的输出,虽然我没有得到,为什么你想要这样的东西。 RandomForestClassifier的{​​{1}}和__str__返回类的实际名称是有原因的。这样您就可以__repr__恢复对象。无论如何,

eval

更新2 覆盖In [1]: from sklearn.ensemble import RandomForestClassifier In [2]: class my_rf(RandomForestClassifier): def __str__(self): superclass_name = RandomForestClassifier.__name__ return "foo_" + superclass_name + "(" + RandomForestClassifier.__str__(self).split("(", 1)[1] In [3]: forest = my_rf() In [4]: print forest foo_RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1, oob_score=False, random_state=None, verbose=0, warm_start=False) 时没有参数,因为在超类__init____str__中实现了扫描传递给的参数列表__repr__。您可以通过运行此代码清楚地看到它:

__init__