将元组作为变量传递

时间:2020-06-02 21:40:33

标签: python class arguments

我通过参数传递一个元组,出现以下错误。 我在互联网上搜索,工作方法正确。有人可以看看吗?

人员班

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'

2 个答案:

答案 0 :(得分:0)

我假设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(),您刚刚在调用self时创建了一个create_connclient值,并且满足了所有必需的参数(如错误所示)。

Sqldata类已正确启动。

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

是TypeError,它指示我的类方法不接受元组。还是我错了?


答案 1 :(得分:0)

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

Sqldata.create_connclient(*values)

星号打开元组的包装。但是,请阅读justahuman的回复,因为我认为他们可能已经发现了更深层次的问题。