【问题标题】:passing a tuple as variable将元组作为变量传递
【发布时间】:2020-09-21 12:02:57
【问题描述】:

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

人物类

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'

【问题讨论】:

标签: python class arguments


【解决方案1】:

如果你想将元组中的两个值作为self和vdata两个参数传递,你应该这样写。

Sqldata.create_connclient(*values)

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

【讨论】:

    【解决方案2】:

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

    如果您要匿名调用它,我不确定您为什么将其设为一个类,但以下是解决方案:

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

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

    Sqldata 类已正确启动。

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

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

    
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2021-04-02
      • 2017-03-25
      相关资源
      最近更新 更多