我继承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?
相关答案 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__