在def python中传递类变量

2024-05-19 14:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python代码,我试图向用户询问名字/姓氏、电子邮件和pin码

我在不制作def的情况下实现了这一点,但我想在课堂上使用def,让事情看起来更好

我的问题是,我不知道如何使用我的类变量Usr来设置def中的Usr.pin

这就是我所拥有的

class Usr:
    def __init__(self, fName, lName, email, pin):
        self.fName = fName
        self.lName = lName
        self.email = email
        self.pin = pin`

    def pinChecker(self, usrData, checker): #the int checker is passed into the code as 1
        while (checker < 2):

            for x in range(len(usrData)):
                if self.pin in usrData[x].pin or (len(self.pin) != 4) or (not self.pin.isdigit()):
                    print('Pin is invalid, please try again')
                    self.pin = input('Please enter in pin again: ')
                else:
                    checker = checker + 1

        return self.pin

调用它的函数会保存返回值

pin = Usr.pinChecker(Usr.pin, usrData, checker) #usrData is an empty list 

总的来说,我对如何正确地传递Usr.pin感到困惑


Tags: ortheinselflenisemailusr
2条回答

必须创建类的实例,然后才能调用其方法:

user = Usr('Marsellus', 'Wallace', 'marsellus.wallace@gmail.com', '1234')
user.pinChecker()

看来你走错方向了。您有一个Usr类,它可能表示某种用户的状态,但是使用Usr.pin来表示一些用户输入,而不是实际的PIN?让我们把这个逻辑颠倒过来

class User(object):  # we're not gaining anything by dropping the 'e'   be explicit

    PIN_RETRIES = 2

    def __init__(self, first_name, last_name, email, pin):
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.pin = pin

    def check_pin(self):
        for i in range(self.PIN_RETRIES):  # try up to PIN_RETRIES times
            attempt = input("Enter your PIN: ")
            if attempt == self.pin:
                print "Success"
                return True
            else:
                retry_attempts = self.PIN_RETRIES - i - 1
                print(f"Wrong PIN, {retry_attempts:d} {'try' if retry_attempts == 1 else 'tries'} left")
        else:
            # if we fail PIN_RETRIES times:
            return False

然后我们可以在回复中查看:

>>> user = User('Adam', 'Smith', 'myemail@mydomain.com', '1234')
>>> user.check_pin()
Enter your PIN: 1233
Wrong PIN, 1 try left
Enter your PIN: 1234
Success

相关问题 更多 >