You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用DecisionTree类方法时持续出现AttributeError?

解决'DecisionTree' object has no attribute 'gini'错误

常见原因及修复方案

1. 缩进错误(最可能)

Python是缩进敏感语言,类的方法必须和__init__保持同级缩进。检查你的gini方法是否被错误缩进为__init__函数的内部方法。

正确缩进的代码示例:

class DecisionTree():
    def __init__(self, data, features, rows, min_samples_split=2, max_depth=5, depth=None, **kwargs): 
        self.data = data  
        self.features = list(self.data.columns)  # 注意:此处会覆盖传入的features参数,若不符合预期需修改
        self.rows = data.index
        self.min_samples_split = min_samples_split
        self.max_depth = max_depth
        self.depth = depth
        self.counts = Counter()
        self.root = None
        self.child = None

    def gini(self):
        t = len(self.data)
        p = self.data.groupby(self.features).size()/t
        return 1 - sum(p **2)

2. 类定义被意外覆盖

检查代码中是否在定义DecisionTree类之后,出现了重新赋值DecisionTree变量的情况,比如:

# 错误示例:覆盖了类的定义
DecisionTree = some_other_object

若存在此类代码,删除或修改该赋值语句即可。

3. 代码执行顺序问题

确保在创建tree1实例之前,已经完整定义了DecisionTree类及其gini方法,不要在实例化后才补充方法定义。

额外提示

你的__init__方法中,self.features = list(self.data.columns)会直接覆盖传入的features参数,如果你原本想使用传入的特征列表,应修改为:

self.features = features  # 保留传入的参数值

内容的提问来源于stack exchange,提问作者BarbG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:45:57