首页 > 解决方案 > 如何将对象存储在动态生成的变量中?

问题描述

我有一个包含一系列客户的文本文件。每条线路都有不同的客户。每个客户端都有一个 ID、一个用户名和一个密码。

我想创建一个“客户端”类,并在该类中循环生成对象。每个对象都有一个用户名和一个密码,并将存储在一个包含客户 ID 的变量中。客户端 1 将存储在“client_1”中,客户端 2 将存储在“client_2”中,以此类推。

我创建了打开文本文件的方法“read()”,如果有空行则中断,并检索每个客户端(每一行)的 ID、用户名和密码。

我想不通的是如何做到这一点,以便当客户端的 ID 为“1”时,我为该客户端创建一个对象并将其存储在变量“client_1”中。当客户端的 ID 为“2”时,我将客户端的 2 对象存储在变量“client_2”中,依此类推。

但我想自动执行此操作,而不是拥有 9000 个客户端并且必须自己创建 9000 个变量。

谢谢

class Client:

    def __init__(self, username, password):
        self.username = username
        self.password = password

    def read(self):
        clients = []
        with open("Clients.txt", "r") as file:
            lines = file.readlines()
            for line in lines:
                if not line:
                    break
                else:
                    client = line.split(" | ")
                    client_id = client[0]
                    #How do I create the variable "client_client[0]"?
                    username = client[1]
                    pre_password = client[2]
                    password = pre_password.strip("\n")
                    #client_client[0] = Client(username, password)
                    clients.append(#client_client[0])
            return clients

我的文本文件(ID、用户名、密码 - 从左到右):

1 | admin | Z9?zzz
2 | John | J1!jjj
3 | Steve | S1!sss

另外,如果我在 read() 中使用“用户名”和“密码”变量,而我已经在 def init中使用它们,是否有问题?

谢谢

标签: pythonpython-3.xclassoopobject

解决方案


建议

  • 在您的循环中,您正在使用break. 不要那样做,你想要使用的是continue跳过这个迭代而不是让你摆脱它。

  • 您只使用strip('\n')您的密码。您应该对所有项目执行此操作(以确保它们都是统一的)。但是你strip('\n')只在密码盒上使用是对的,因为它是唯一一个有\n. 不要把参数放进去strip(),它会处理所有的空格、制表符和其他\n等等\r

  • 您应该将self类​​的参数视为box存在于其中的一个。这是你基本上可以在课堂上随处访问的“环境” 。而且如果你在里面创建一些东西self,比如self.client,它不会和一个单一的变量命名一样client。您可能想要在这里做的是将您刚刚阅读的客户列表分配给self,例如self.client_list = self.read()

关于您的计划

您需要做的不是创建与用户一样多的变量。但是您的理念是正确的,您希望将它们存储在一个地方。这就是你所做的。现在,您的程序的意义对我们来说仍然是模糊的。但是您可能想要做的是:

  1. 拥有一个数据库,您可以在其中了解物品的排序方式。您知道,在您的 users_list 的每个元素中,您的第一项是 an id,第二项是 it ,name第三项是 it password

  2. 基于此数据库进行操作。

    • 您想“加载”一个客户,检查他是否存在于您的数据库中,并将他输入的密码与您链接的密码相匹配!
    • 你想删除一个吗?
    • 为已经登录的人订购冰淇淋?

推荐阅读