简体   繁体   中英

Passing a variable as a list of arguments

My code is below. I'm just getting the basic functionality working before making more of the database, but I've run into a problem - Is there any way to pass a variable into four different arguments? My create_person function uses four arguments, but I need to initiate this after I create a Person object.

import os
import sqlite3
from personClass import *

#Connection to database - ToDoDB.db
conn = sqlite3.connect('ToDoDB.db')

cursor = conn.cursor()

def create_table_ToDo():
    cursor.execute("""CREATE TABLE ToDo (
                    Forename text,
                    Surname text, 
                    FirstChore text,
                    SecondChore text
                      )""")
    print("ToDo table successfuly created!")
    conn.commit()


def create_person(Forename, Surname, FirstChore, SecondChore):
    query= "INSERT INTO ToDo (Forename, Surname, FirstChore, SecondChore)values (?,?,?,?);" #Inserts values below into this - question mark to sanitize first -
    cursor.execute(query,(Forename, Surname, FirstChore, SecondChore)) #- then executes this command
    conn.commit()       #Commit and close after each function to save
    print("New person and tasks added to the list of users")



#create_table_ToDo()

johnTest = Person("John", "Test", "Ironing clothes", "Washing dishes")
print(johnTest)

create_person(johnTest)

I've included my person class here just in case it helps.

class Person(ToDo):
    def __init__(self, firstName, lastName, choreOne, choreTwo):
        super().__init__(choreOne, choreTwo)
        self.firstName = firstName
        self.lastName = lastName
     
    def getName(self):
     print("My name is " + self.firstName + " " + self.lastName)

    def getTasks(self):
        print("My name's " + self.firstName + " and my tasks are " + self.choreOne + ", " + self.choreTwo)

    def __repr__(self):
        response = "{},{},{},{}".format(
            self.firstName,
            self.lastName,
            self.choreOne,
            self.choreTwo)
        return response

You can use python's built-in getattr method to access the attribute values of an object. The following line should work:

create_person(getattr(johnTest, 'firstName'), getattr(johnTest, 'lastName'), getattr(johnTest, 'choreOne'), getattr(johnTest, 'choreTwo'))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM