如何返回Python类__init__方法中存储的数据集
问题原因
代码存在两个核心错误,导致输出不符合预期:
- 实例属性绑定错误:
__init__方法内直接写__dataset__ = data定义的是方法内部的局部变量,生命周期仅在__init__方法执行期间存在,不会绑定到类实例上。Python类中如果要定义所有实例方法可访问的属性,必须通过self.属性名 = 值的形式绑定。 - 方法调用语法错误:
print(test.__print__)没有在方法名后加括号,Python不会执行方法内部逻辑,只会直接打印方法对象本身的描述信息,也就是你看到的<bound method automate_lm.__print__ of <__main__.automate_lm object at 0x7fae1014b670>>输出。也正因为方法没有实际执行,你代码里self.__dataset__未定义的问题才没有触发AttributeError报错。
额外说明: __print__不是Python内置的特殊方法名,如果你希望直接打印类实例就能输出数据集头部内容,应该重写内置的__str__或__repr__方法。
修正后代码
提供两种常用实现方式:
方式1:保留自定义方法调用
import faraway.datasets.pima pima = faraway.datasets.pima.load() class automate_lm: def __init__(self, data): # 绑定为实例属性 self.__dataset__ = data def get_head(self): return self.__dataset__.head() if __name__ == '__main__': test = automate_lm(pima) # 调用方法必须加括号 print(test.get_head())
方式2:重写内置字符串方法,支持直接打印实例
import faraway.datasets.pima pima = faraway.datasets.pima.load() class automate_lm: def __init__(self, data): self.__dataset__ = data def __str__(self): # __str__必须返回字符串类型 return str(self.__dataset__.head()) if __name__ == '__main__': test = automate_lm(pima) print(test)
运行结果
两种写法执行后都能得到预期的数据集前5行输出:
pregnant glucose diastolic triceps insulin bmi diabetes age test 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1
内容的提问来源于stack exchange,提问作者Dollar X
相关产品推荐
相关产品推荐

