簡體   English   中英

有沒有辦法生成類的實例

[英]Is there a way to generate instances of a class

我正在嘗試進行某種登錄系統,但除了手動創建大量變量來存儲名稱和密碼之外,我不知道如何存儲數據

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: ') )如果問題很愚蠢,我很抱歉,但我對編碼很陌生,所以非常感謝幫助

您可以將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.

您可以在實例化后更改屬性。 :)

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

如何使用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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM