Python - 在运行时访问和使用特定对象

时间:2018-04-05 09:34:01

标签: python oop

我正在开设一个银行帐户计划,用户使用四位数字(针脚)登录。

我希望找到一种方法,在输入正确的引脚后,在运行时访问具有所有属性的特定对象。

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(),但在这种情况下似乎没用。

2 个答案:

答案 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,这是一个无用的功能。