You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将User_interaction类的变量传递给DataBase_Management类?

实现用户交互输入到数据库添加方法的参数传递

要把User_interaction类中add_item_interaction获取的用户输入,传给DataBase_Management的add_item方法,按以下步骤修改即可:

步骤1:修复User_interaction类的内部问题

原代码存在几个小错误,先修正:

  • enter_data是类的实例方法,必须添加self作为第一个参数
  • add_item_interaction里的变量名要统一(self.add_name改为self.add_item_name),空值判断的变量也要对应
  • 在ask_options的选项1分支里,调用self.add_item_interaction()触发输入流程

修正后的User_interaction类代码:

class User_interaction(object):  # 类名采用大驼峰规范

    def __init__(self):
        self.name = self.ask()
        self.options = self.ask_options()
        self.add_item_num = None
        self.add_item_price = None
        self.add_item_quant = None
        self.add_item_name = None

    def ask(self):
        while True:
            name = input("What is your name?\n")
            if name == "":
                print("Ha! You have to enter a name!")
            else:
                print("Welcome to the Shepherdstown Bake Shop " + name)
                return name
            
    def ask_options(self):
        while True:
            option = input('''What would you like to do? \n1. Add a Item: \n2. Delete a Item:\n3. Edit an Item: \n4. View Inventory \n5. End Program\n''')
            if option == '1':       
                print("Welcome to the adding process " + self.name)
                self.add_item_interaction()  # 调用输入方法
                break
            # 其他选项可后续补充逻辑

    def enter_data(self, message, typ):  # 添加self参数
        while True:
            try:
                v = typ(input(message))
            except ValueError:
                print(f"That's not an {typ.__name__}!")  # 用__name__输出类型名称更友好
                continue
            else:
                break
        return v

    def add_item_interaction(self):
        self.add_item_num = self.enter_data("What is the items #?\n", int)  # 调用实例方法要加self
        self.add_item_price = self.enter_data("What is the items price?\n", float)
        self.add_item_quant = self.enter_data("What is the items quantity?\n", int)

        while True:
            self.add_item_name = self.enter_data("What is the items name?\n", str)
            if self.add_item_name == "":  # 修正变量名
                print("Ha! You have to enter a name!")
                continue
            break

步骤2:修改DataBase_Management的add_item方法,接收外部参数

让add_item方法接收item_num、price、quant、name四个参数,直接用于构建新行:

修正后的DataBase_Management类代码:

import csv  # 记得导入csv模块

class DataBase_Management(object):
    
    def __init__(self):
        self.result = []
        self.make_dict_items()  # 初始化时加载现有数据

    def make_dict_items(self):
        with open("Items2.csv") as fp:
            reader = csv.reader(fp)
            labels = next(reader, None)
            for row in reader:
                if row:
                    row[0] = int(row[0])
                    row[1] = float(row[1])
                    row[2] = int(row[2])
                    pairs = zip(labels, row)
                    self.result.append(dict(pairs))
    
    def add_item(self, item_num, price, quant, name):  # 添加参数
        new_row = [item_num, price, quant, name]
        with open("Items2.csv", "a+", newline='') as fp:  # 添加newline=''避免空行
           reader = csv.reader(fp)
           fp.seek(0)
           labels = next(reader, None)
           writer = csv.writer(fp)
           new_record = dict(zip(labels, new_row))
           self.result.append(new_record)
           writer.writerow(new_record.values())
           print("Item Added! Check Inventory Again to see!")

步骤3:主逻辑中完成参数传递

实例化两个类,在用户选择添加选项后,把User_interaction实例的属性传给DataBase_Management的add_item方法:

if __name__ == "__main__":
    ui = User_interaction()
    db = DataBase_Management()
    # 当用户选择添加选项后,传递参数
    if ui.options == '1':
        db.add_item(ui.add_item_num, ui.add_item_price, ui.add_item_quant, ui.add_item_name)

关键说明

  • 通过实例属性传递:User_interaction实例把输入值存在自身属性中,外部可直接访问这些属性
  • 方法参数接收:DataBase_Management的add_item通过参数接收外部传入的值,实现类之间的解耦,避免直接依赖对方的内部结构

内容的提问来源于stack exchange,提问作者py_coder1019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:40:31