我正在开设一个银行帐户计划,用户使用四位数字(针脚)登录。
我希望找到一种方法,在输入正确的引脚后,在运行时访问具有所有属性的特定对象。
class Konto(object):
def __init__(self, account_holder, balance , pin):
self.account_holder = account_holder
self.balance = balance
self.pin = pin
我在列表中定义了三个不同的对象
kontoList = []
kontoList.append(Konto("Person1", 143541, 1223)),
kontoList.append(Konto("Person2", 6230, 1234)),
kontoList.append(Konto("Person3", 4578, 4321))
最后一个属性是用户输入的Pin。例如,当程序检查引脚是'1234'时,它会显示一个菜单,您可以在其中获得当前余额,账户持有人等。在这种情况下,它将是6230(余额)和Person2(账户持有人)。所以这里有一些代码:
pin = input("PIN: ")
for konto in kontoList:
if konto.pin == pin:
print("Valid PIN")
continue
else:
print("not valid")
break
while True:
print("1: Withdrawal \n"
"2: Deposit \n"
"3: Transfer \n"
"4: Current Balance \n"
"5: Account Holder \n"
"6: Quit \n")`
choice = input("Your Choice: ")
有没有办法在运行时访问特定对象,然后继续使用它?我查了getattr()
,但在这种情况下似乎没用。
答案 0 :(得分:0)
您可以尝试这样的事情:
kontos_with_pin = filter((lambda k: k.pin == pin), kontoList)
if len(kontos_with_pin) == 1:
relevant_konto = kontos_with_pin[0]
# Do something with relevant_konto
else:
# handle case where there is no konto with that pin, or more than one, etc.
答案 1 :(得分:0)
您只需创建一个引脚列表,然后检查您正在检查的引脚是否包含在该列表中:
kontoPinList = [konto.pin for konto in kontoList]
然后你会检查你的图钉是否在kontoPinList中:
pin in kontoPinList
编辑:如果您想继续使用konto,请执行以下操作:
for konto in kontoList:
if konto.pin == pin:
#do something with the konto here
编辑nr.2:如果您现在想要调用konto上的函数,例如account_holder(),您只需执行account_holder(konto)即可。
我的第一个回应是写一个getPin()函数的原因是因为虽然这不能解决你的问题,但最好通过决定你想要如何返回它们来“保护”你的变量。 (它更像是一个java东西而不是python的东西)
然而,正如你所指出的,如果你感兴趣的只是返回konto.pin,这是一个无用的功能。