【问题标题】:Maximum recursion depth exceeded when inheriting class继承类时超出最大递归深度
【发布时间】:2017-08-15 18:14:15
【问题描述】:

我正在尝试在另一个类 MyDBSCAN 中从 scikit-learn 扩展 DBSCAN 类,但我遇到了递归限制,我无法弄清楚为什么会发生这种情况。

我已将问题简化为以下代码:

from sklearn.cluster import DBSCAN

class MyDBSCAN(DBSCAN):
    def __init__(eps=0.5, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=1):
        super().__init__(eps, min_samples, metric, metric_params, algorithm, leaf_size, p, n_jobs)

if __name__ == "__main__":
    items = [[1], [2], [3], [4]]
    clusterer = MyDBSCAN()
    clusterer.fit(items)

使用 DBSCAN 类运行上述内容可以正常工作,但使用 MyDBSCAN 时,我得到以下输出:

File "./MyDBSCAN.py", line 11, in <module>
    clusterer.fit(items)
  File "/usr/local/lib/python3.4/dist-packages/sklearn/cluster/dbscan_.py", line 281, in fit
    **self.get_params())
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 244, in get_params
    deep_items = value.get_params().items()
...
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 244, in get_params
    deep_items = value.get_params().items()
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 227, in get_params
    for key in self._get_param_names():
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 197, in _get_param_names
    init_signature = signature(init)
  File "/usr/lib/python3.4/inspect.py", line 2055, in signature
    return _signature_internal(obj)
  File "/usr/lib/python3.4/inspect.py", line 1953, in _signature_internal
    return Signature.from_function(obj)
  File "/usr/lib/python3.4/inspect.py", line 2458, in from_function
    __validate_parameters__=is_duck_function)
  File "/usr/lib/python3.4/inspect.py", line 2374, in __init__
    for param in parameters))
  File "/usr/lib/python3.4/collections/__init__.py", line 60, in __init__
    self.__update(*args, **kwds)
  File "/usr/lib/python3.4/_collections_abc.py", line 590, in update
    if isinstance(other, Mapping):
  File "/usr/lib/python3.4/abc.py", line 188, in __instancecheck__
    subclass in cls._abc_negative_cache):
  File "/usr/lib/python3.4/_weakrefset.py", line 75, in __contains__
    return wr in self.data
RuntimeError: maximum recursion depth exceeded in comparison

我尝试像这样覆盖get_params(),但无济于事:

def get_params():
    super().get_params()

【问题讨论】:

  • 你忘记了 self 参数!

标签: python python-3.x inheritance recursion scikit-learn


【解决方案1】:

我不能在这里解决你所有的问题,但__init__ 应该有self 作为它的第一个参数。

【讨论】:

  • 这就是问题所在!
猜你喜欢
  • 2018-04-14
  • 2013-12-01
  • 2021-12-09
  • 2017-03-24
  • 2011-12-31
  • 2017-08-09
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多