以下为什么不工作(Python 2.5.2)?
>>> import datetime
>>> class D(datetime.date):
def __init__(self, year):
datetime.date.__init__(self, year, 1, 1)
>>> D(2008)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: function takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我想创建一个类似datetime.date但具有不同__init__功能的类.显然我的功能永远不会被调用.相反,原来datetime.date.__init__被调用并失败,因为这需要3个参数,而我正在传递一个.
这里发生了什么?这是一个线索吗?
>>> datetime.date.__init__
<slot wrapper '__init__' of 'object' objects>
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想扩展 scikit-learn 的ClassificationCriterion类,它被定义为内部模块中的 Cython 类sklearn.tree._criterion。我想在 Python 中做到这一点,因为通常我无法访问 sklearn 的 pyx/pxd 文件(所以我不能访问cimport它们)。但是,当我尝试扩展时ClassificationCriterion,出现错误TypeError: __cinit__() takes exactly 2 positional arguments (0 given)。下面的 MWE 重现了错误,并显示错误发生__new__在__init__.
有没有办法像这样扩展 Cython 类?
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree._criterion import ClassificationCriterion
class MaxChildPrecision(ClassificationCriterion):
def __new__(self, *args, **kwargs):
print('new')
super().__new__(MaxChildPrecision, *args, **kwargs)
def __init__(self, *args, **kwargs):
print('init')
super(MaxChildPrecision).__init__(*args, **kwargs)
clf = DecisionTreeClassifier(criterion=MaxChildPrecision())
Run Code Online (Sandbox Code Playgroud)