有没有一种生成类实例的方法

时间:2020-09-06 19:55:14

标签: python

我正在尝试进行某种形式的登录,但是除了手动创建大量变量来存储名称和密码之外,我不确定如何存储数据

class Acc:
   def __init__(self, name='', passw=''):
       self.name = name
       self.passw = passw

acc1 = Acc('ab','qw')
acc2 = Acc('kl', 'jm')
acc3 = Acc()
acc4 = Acc()
# ...
# etc

我想做一个函数 创建一个空变量'accx',然后使其成为类Acc()的实例 然后让用户使用输入功能填写其名称和密码。 accx = Acc(input('name: '),input('password: ') ) 如果问题很愚蠢,对不起,但是我对编码很陌生 因此,我们将不胜感激

3 个答案:

答案 0 :(得分:2)

您可以将Acc实例存储在列表或字典中。然后,您不必使用很多变量名,并且可以快速引用任何Acc实例。

我假设您不对任何敏感数据使用此程序,但是作为最佳实践,您应该使用getpass.getpass函数输入密码。

import getpass

class Acc:
    def __init__(self, name, passw):
        self.name = name
        self.passw = passw

# Hold all Acc instances in one list.
all_accs = []

def new_acc():
    name = input('name: ')
    passw = getpass.getpass('password: ')
    a = Acc(name=name, passw=passw)
    all_accs.append(a)

new_acc()  # enter name and password

# Now all_accs[0] references the `Acc` created in the line above.

如果要将Acc实例存储在字典中,则过程将类似。您可以将用户名映射到他们的Acc实例。

# Hold all Acc instances in one list.
all_accs = {}

def new_acc():
    name = input('name: ')
    if name in all_accs:  # Check for existing name
        raise ValueError("name already exists")
    passw = getpass.getpass('password: ')
    a = Acc(name=name, passw=passw)
    all_accs[name] = a
    
new_acc()  # enter "John" and password

# Now all_accs["John"] references the `Acc` created in the line above.

答案 1 :(得分:0)

您可以在实例化后更改属性。 :)

accx = Acc()
accx.name = input('name:')
accx.passw= input('password:')

答案 2 :(得分:0)

如何使用dict(词典)存储您的信息?

通常,您需要某种类型的数据库,但有时简单的dict可以在一开始就提供帮助:

import getpass

accounts = {}
while (name := input("Name: ")) != "!exit":
    passwd = getpass.getpass()  # Safer.
    accounts[name] = Acc(name, passwd)

运行它:

Name: Hey
Password:
Name: Hello
Password:
Name: !exit
>>> accounts
{'Hey': <__main__.Acc object at 0x000001BA01DF02E0>, 'Hello': <__main__.Acc object at 0x000001BA01F26850>}
>>> accounts["Hey"].passw
"I'm secret"