自定义sklearn兼容类时__repr__触发AttributeError的原因排查
自定义sklearn分类器在Spyder交互环境中触发AttributeError的问题
我正在实现兼容sklearn的自定义分类器,继承自BaseEstimator和ClassifierMixin,并在构造函数中定义了自定义参数。调试时遇到一个特殊问题:在Mac的Spyder IPython控制台中直接输入对象调用__repr__时,会触发AttributeError,提示分类器缺少指定属性;但以脚本形式运行、在Windows的PyCharm中均无此错误。
最小复现示例
from sklearn.base import BaseEstimator, ClassifierMixin class MyClassifier(BaseEstimator, ClassifierMixin): def __repr__(self, **kwargs): return "In MyClassifier.__repr__() ..." def __init__(self, my_arg=0): pass mc = MyClassifier() # 仅在交互环境中触发错误: # AttributeError: 'MyClassifier' object has no attribute 'my_arg' mc
已发现的现象
- 不继承
BaseEstimator则无错误 - 将
my_arg赋值给同名的self.my_arg可解决错误,但赋值给不同名属性无效
请问这是sklearn存在成员变量需与形参同名的隐式约定,还是Spyder、Python版本或其他环境的特性,或是我的实现有误?
我的环境配置:Spyder 5.5.2,Python 3.9.7,IPython 8.18.1,sklearn 1.3.2,Mac Intel Core i7 + Sonoma 14.4.1。
内容的提问来源于stack exchange,提问作者Igor F.
相关产品推荐
相关产品推荐

