タプルを変数として渡す

2020-06-03 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'

Answers

私はSqldataがあなたが作成したクラスであると想定しています(その特定のコードと適切なインデントの欠如のためにためらいがあります)。クラスであるため、メソッドを呼び出す前にインスタンス化する必要があります。

匿名で呼び出す場合、なぜそれをクラスにしたのかはわかりませんが、以下が解決策です。

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

これは、クラスオブジェクトSqldataインスタンスを作成したことを意味します。 create_connclientは、 selfvdata 2つのパラメーターがあります。 Sqldata()呼び出すことにより、 create_connclientを呼び出したときにself値が作成され、必要なすべてのパラメーターを満たします(エラーに示されています)。

Sqldataクラスが正しく開始されます。

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

私のクラスメソッドがタプルを受け入れないことを示すのはTypeErrorです。それとも私は間違っていますか?


タプルの2つの値を2つの引数selfvdataとして渡したい場合は、次のように記述します。

Sqldata.create_connclient(*values)

アスタリスクはタプルをアンパックします。しかし、ジャスタヒューマンの反応を読んでください。彼らはより深い問題を発見したのではないかと思います。

Related