作为变量传递元组

2024-09-24 22:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过参数传递一个元组,得到以下错误。 我在网上搜索,工作方法是正确的。有人能看一下吗

人类

from datetime import datetime
from sqldata import Sqldata


class Person:
    def __init__(self, addr, client):
        self.addr = "192.12"
        self.client = "demorun"
        self.name = none

    def set_name(self, name):
        self.name = name
        values = (self.addr, self.name, str(datetime.now()))
        Sqldata.create_connclient(values)

Sqldata类将数据写入数据库

import sqlite3
from sqlite3 import Error
import os

fileDir = os.path.dirname(os.path.realpath(__file__))
filename = "dbConnClients.db"
db_file = os.path.join(fileDir,  "database\\" + filename)


class Sqldata:
    def __init__(self):
        self.conn = None
        try:
            self.conn = sqlite3.connect(db_file)
        except Error as e:
            print(e)

    def create_connclient(self, vdata):
        print(vdata)
        conn = self.conn
        sqlquery = ''' SELECT id FROM ConnClients WHERE name = ? '''
        cur = conn.cursor()
        cur.execute(sqlquery, vdata[1])

错误:

File "...person.py", line 23, in set_name
    Sqldata.create_connclient(vdata)
TypeError: create_connclient() missing 1 required positional argument: 'vdata'

Tags: pathnamefromimportselfdatetimeosdef
2条回答

如果要将元组中的两个值作为两个参数selfvdata传递,应该这样编写

Sqldata.create_connclient(*values)

星号将打开元组。然而,请阅读justahuman的回复,因为我认为他们可能发现了一个更深层次的问题

我假设Sqldata是您创建的一个类(由于缺少特定的代码和适当的缩进而犹豫不决)。因为它是一个类,所以在调用它的方法之前需要实例化它

我不知道如果你打算匿名调用它,为什么你会将其列为一个类,但以下是解决方案:

Sqldata().create_connclient(values)
# if your __init__ function has args,
# you will need to input it in the instantiation

这意味着我们刚刚创建了类对象Sqldata的一个实例create_connclient有两个参数,selfvdata。通过调用Sqldata(),您在调用create_connclient时只创建了一个self值,并且满足了所有必需的参数(如错误中所示)

Sqldata类已正确启动

class Sqldata:
    def __init__(self):
        self.conn = None
        ...

TypeError表示我的类方法不接受元组。还是我错了

相关问题 更多 >