“缺少论点”;“自我”;python中的错误

“缺少论点”;“自我”;python中的错误,python,Python,我得到以下错误: TypeError: get_data() missing 1 required positional argument: 'self' 尝试从MySQL检索数据时: class test(mytest): start_urls = [] def __init__(self): self.create_connection() def create_connection(self): settings = g

我得到以下错误:

TypeError: get_data() missing 1 required positional argument: 'self'
尝试从MySQL检索数据时:

class test(mytest):
   
    start_urls = []

    def __init__(self):
        self.create_connection()

    def create_connection(self):
        settings = get_project_settings()

        self.conn = mysql.connector.connect(        
            host        = settings.get('MYSQL_SERVER'),
            user        = settings.get('MYSQL_USER'),
            passwd      = settings.get('MYSQL_PW'),
            database    = settings.get('MYSQL_DB'),
            charset     = 'utf8'
        )
        self.curr = self.conn.cursor()
        self.curb = self.conn.cursor(buffered=True)

    def get_data(self):

        try: 
            self.curb.execute("SELECT ID FROM test")
            results = self.curb.fetchall()
            for row in records:
                test.id = results[0]
            self.curb.close()    
        except mysql.connector.Error as error:
            print("Failed to fetch data - MySQL Error {}".format(error))  

    get_data()

    print(test.id)

print(test.id)

我相信我没有完全理解self的概念,因为我是python初学者。有人能给我指出正确的方向吗?

如果你像那样缩进get_data函数,它是测试类的一个方法,你应该向这个方法传递一些东西

例如:
类的实例。获取数据()

如果您不想将其作为测试类的方法,那么缩进是错误的,但是因为您在定义函数时传递了arg

def get_数据(自):
调用时,您仍需向其传递参数:

get_数据(ARG)

如果要在类中调用该类的任何方法,需要如下调用:

类测试:
定义初始化(自):
'''
创建连接并在创建类的实例时获取数据
'''
self.create_connection()
self.get_data()
通常,您会在类的实例上调用类的方法,如下所示:

类测试:
定义初始化(自):
self.create_connection()
test_instance=test()
数据=测试\实例。获取\数据()
另外,类的名称通常是这样大写的:
Test

如果您想更多地了解python中的类,请随时查看以下资源:


看起来您试图定义一个方法,但它不在您的类中。要调用一个方法,需要使用该类的一个实例。没错,这是我为此创建的一个最小示例。我的原始代码是正确缩进的。如果你知道示例代码与实际代码有不同的问题,那么发布示例代码有什么意义呢?这不是问题。缩进会导致问题。你还需要在一个类的实例上调用get_data()-如果这个函数在一个类中,那么就创建一个并使用它,这就是self的意思,它是正在使用的类的当前实例。啊,我们在缩进方面仍然有问题,get_data()是对一个类方法的调用,而不是对一个类的实例的调用…听起来合乎逻辑,但是我仍然得到了错误:“namererror:name'self'没有定义”@merlin你是对的。只能在类内的方法或类外的类实例中使用
self.get_data()
。我编辑了我的答案,以显示执行
get\u data()
的两种方式。