如何返回存储在__init__下的数据集



也许这不是接近类结构的正确方法,但是,我试图在__init__中存储数据集,然后在另一个函数中调用它们以读取head的前几个结果,但是我没有得到数据帧输出。

例如:

import faraway.datasets.pima
pima = faraway.datasets.pima.load()
#print(pima.head())
class automate_lm:
def __init__(self, data):
__dataset__ = data

def __print__(self):
__p__ = self.__dataset__.head()
return(__p__)
if __name__ == '__main__':
test=automate_lm(pima)
print(test.__print__)

给:

<bound method automate_lm.__print__ of <__main__.automate_lm object at 0x7fae1014b670>>
预期输出:

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

忘记在'dataset前面放self'

_dataset(伪私有属性)听起来比__dataset__好

下划线vs带有变量和方法的双下划线

是一种更python化的方式,看起来像这样

class automate_lm:
def __init__(self, data):
self._dataset = data

def __str__(self):
return self._dataset.__str__()
def __repr__(self):
return self._dataset.__repr__()
if __name__ == '__main__':
test = automate_lm(pima)
print(test)

好的,我看到你的代码中有两个简单但致命的错误。

我将试着用一个虚拟的数据框架来重现你的代码,向你解释这一点。

import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns = ["a","b","c"])
class automate_lm:
def __init__(self, data):
self.__dataset__ = data # First correction

def __print__(self):
__p__ = self.__dataset__.head() # First correction
return(__p__)
if __name__ == '__main__':
test=automate_lm(df)
print(test.__print__()) # Second correction

第一校正

对于可以通过类内所有函数访问的变量,应该在开始时赋值并调用self.。你在两个地方犯了这个错误。赋值时和调用时。

第二校正

当你想打印一个函数的结果时,你应该用(*args,**kwargs)结尾来调用这个函数。但是你只是叫了它的名字,连括号都没有。只要指向函数在内存中的位置。它会给你<bound method automate_lm.__print__ of <__main__.automate_lm object at 0x7fae1014b670>>

您应该像这样在__init__中添加self.

def __init__(self, data):
self.__dataset__ = data

那么你可以在其他方法中使用它。

def __print__(self):
__p__ = self.__dataset__.head()
return(__p__)

在调用__print__时也有错误,您需要使用()调用它,如:

print(test.__print__())

最新更新