当前位置: 首页 > 知识库问答 >
问题:

超级__str__没有被召唤

钮善
2023-03-14

我继承了从sklearn.ensemble导入的随机森林分类器,我试图打印我的新估计:

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__() 

与相同的结果。预期是类似于sk学默认行为的东西:

>>> 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)
>>>

这也是我使用打印a.\uuu str\uuuu()时的结果。

我错过了什么?谢谢。

与如何更改Python类的字符串表示有关?

共有1个答案

姜凯风
2023-03-14

RandomForestClassifier中,\uuuuuu str\uuuu查找从中调用它们的实例的类的名称(self)。您应该直接引用超类的名称。

更新这就是你如何获得你想要的输出,尽管我不明白,你为什么想要这样的东西。有一个原因,为什么R随机森林分类器__str____repr__返回一个类的实际名称。这样,您可以ava来恢复对象。不管怎样,

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)

更新2:重写\uuuuu init\uuuu时,您不会得到任何参数,因为在超类\uuuu str\uuuuu\uuuu repr\uuuu中实现了扫描传递给的参数列表。通过运行以下代码,您可以清楚地看到它:

In [5]: class my_rf(RandomForestClassifier):
    def __init__(self, *args, **kwargs):
        RandomForestClassifier.__init__(self, *args, **kwargs)
    def __str__(self):
        superclass_name = RandomForestClassifier.__name__
        return "foo_" + superclass_name + "(" + RandomForestClassifier.__str__(self).split("(", 1)[1]
In [6]: forest = my_rf()
In [7]: print forest
...
RuntimeError: scikit-learn estimators should always specify their parameters in the signature of their __init__ (no varargs). <class '__main__.my_rf'> with constructor (<self>, *args, **kwargs) doesn't  follow this convention.

 类似资料:
  • 问题内容: 有一个简单的程序代码。在构造函数中,没有扩展到超类的调用,我不明白在这种情况下会发生什么? 问题答案: 没有显式扩展另一个类的每个类都隐式扩展。因此,只需调用Object的no-arg构造函数。 请注意,此显式调用是不必要的,因为编译器会为您添加它。当您要使用参数调用超类构造函数时,只需在构造函数中添加调用。

  • 问题内容: 我正在尝试将MySQL数据库从Amazon EC2复制到RDS: 我成功使用以下命令将数据库的一个放入我的根文件夹中: 然后,我尝试将此.sql文件传输到新的RDS数据库中: 不幸的是,我收到以下错误消息: 我尝试了多种方式,但是当我尝试这样做时也会遇到错误。键入也不起作用。 我是mysql的初学者,所以很抱歉遇到这样一个简单的问题。有什么想法吗? 问题答案: 根据http://get

  • 问题内容: 您能帮忙检查一下为什么doFilter没有被调用吗 web.xml: 类签名: 调用http:// localhost:8080 / hello / world时 返回404 ,我在doFilter处设置了断点,看来doFilter没有被调用?(我尝试了tomcat 6.0.18、6.0.29,jdk1.6) 问题答案: 在以下情况下将不会调用该过滤器: 过滤器类在类路径中丢失和/或不

  • 我试图在EclipseIDE中使用Java编写一个插件。我必须在类中扩展JavaPlugin,但它说它不存在,我需要用它创建一个新类。我试着手动导入JavaPlugin,结果发现它不是一个包。 我试过导入org。巴基特。插件。JAVAJavaPlugin,但这似乎不起作用 现在应该是JConsolePlugin吗?当我悬停在问题上时,它要么说“创建类‘JavaPlugin’要么说“更改为JCons

  • 我有两个服务类和一个存储库类。当我尝试将一个服务bean自动连接到另一个服务bean时,一个bean会被注入。但是当我尝试调用该方法时,它会显示。请帮帮我。过去3天我一直坚持这样做。 我的第一堂服务课: 我的第二个服务类别: 我的存储库类: 我已经尝试了一切(例如

  • 问题内容: 我有一个自动运行git clone /pull的脚本(这实际上发生在jenkinsCI中,但我的问题更笼统)。远程git服务器基于HTTPS。带有git客户端的计算机具有不稳定的DSL Internet连接,因此有时会重新连接并更改IP地址,从而丢失所有现有连接。当git客户端运行时连接失败时,客户端将永远不会成功,但也不会因超时而失败,因此我的脚本会挂断。 我想设置客户端,使其在一段