Python class 声明 "positional argument" 错误

Python class declaration "positional argument" error

我正在试验 pandas。我正在尝试创建一个简单的对象来表示我想要使用的数据。为此,我编写了下面的代码来创建一个对象,但我得到了:

TypeError: test_df() missing 1 required positional argument: 'self

第 13 行。我无法弄清楚我做错了什么。也许我没有得到关于 class 声明的概念。非常感谢任何帮助。

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

使用:

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

而不是

ICBC.test_df()

test_df是一个实例方法,所以你需要一个实例来访问它。您的问题是您尝试访问该方法,因为它是 class 方法

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

一旦您创建了 class 的实例(使用 ICBC(...)),您需要在 实例 [=31] 上调用 test_df 方法=],而不是 class 本身 .

更改您的代码,使 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)

但是,没有人这样做:这不是好的做法,因为它会使代码更长且更难阅读。