Python类声明“位置参数”错误

时间:2018-08-04 15:07:41

标签: python pandas class declaration

我正在尝试熊猫。我正在尝试创建一个简单的对象,该对象代表我要使用的数据。为此,我已经编写了下面的代码来创建对象,但是我得到了:

  

TypeError:test_df()缺少1个必需的位置参数:'self

第13行。我无法弄清楚自己在做什么。也许我没有得到关于类声明的一些概念性信息。非常感谢您的帮助。

import pandas as pd

class ICBC():
   def __init__(self, name, path):
       self.name = name
       self.df = pd.read_csv(path)

   def test_df(self):
       print(self.df.info)


mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
ICBC.test_df() <- This is line 13

3 个答案:

答案 0 :(得分:5)

一旦创建了类的实例(使用ICBC(...)),就需要在 instance 而不是 class上调用test_df方法本身

更改代码,以使mov被称为test_df()

import pandas as pd

class ICBC():
   def __init__(self, name, path):
       self.name = name
       self.df = pd.read_csv(path)

   def test_df(self):
       print(self.df.info)


mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
mov.test_df()

要进一步弄清错误告诉您的内容:当您在Python中的实例上调用方法时,会自动传递一个self参数。但是,ICBC不是实例,因此不会传递self。这会导致您看到参数错误。

此行为意味着您还可以执行以下操作来调用方法:

ICBC.test_df(mov)

但是,没有人这样做:它不被认为是一种好习惯,因为它会使代码更长且更难阅读。

答案 1 :(得分:3)

使用:

mov = ICBC("matisalimba3","z:\devs\py\movimientos.csv")
mov.test_df()

代替

ICBC.test_df()

test_df是一个实例方法,因此您需要一个实例来访问它。您的问题是您试图访问该方法,因为它是一个类方法

答案 2 :(得分:1)

test_df是一个实例方法;您需要在ICBC的实例上调用它,而不是在ICBC本身上调用它。也许您打算写mov.test_df()