Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的NameError,但所有内容都已定义(拼写正确)_Python_Function_Class - Fatal编程技术网

python中的NameError,但所有内容都已定义(拼写正确)

python中的NameError,但所有内容都已定义(拼写正确),python,function,class,Python,Function,Class,我刚刚开始使用类,我决定创建一个快速登录程序。 该程序应该设置一个用户,让他们登录,但每当我运行该程序时,我就会收到一个名称错误。我检查了拼写,一切似乎都是正确的。任何帮助都将不胜感激 class User(object): def __init__(self, name1, name2 , age , username, passw): self.name1 = name1 self.name2 = name2 self.age =

我刚刚开始使用类,我决定创建一个快速登录程序。 该程序应该设置一个用户,让他们登录,但每当我运行该程序时,我就会收到一个名称错误。我检查了拼写,一切似乎都是正确的。任何帮助都将不胜感激

 class User(object):

    def __init__(self, name1, name2 , age , username, passw):
        self.name1 = name1
        self.name2 = name2
        self.age = age
        self.username = username
        self.passw = passw

    def user_setup(self):
        try:
            name1 = str(input("Please enter your first name : "))
            try:
                name2 = str(input("Please enter your last name : "))
                try:
                    age = int(input("Please enter your age in years"))
                except ValueError:
                    print("Thats not allowed")
            except ValueError:
                    print("Thats not allowed")
        except ValueError:
                    print("Thats not allowed")
        self.username = self.name1[0:3] + str(self.age)
        return self.username


    def login(self):
        for i in range(4):
            loginUsername = input("Please enter your username : ")
            if loginUsername == self.username:
                loginPassword = input("Please enter your password : ")
                if loginPassword == self.passw:
                    print("You have loggged in as " + self.username)
                else:
                    print("invalid")
            else:
                print("invalid")
        print("You have entered your username or password incorrectly too many times")
        quit()

def main():

    menu = int(input("1.new user\n2.login\n-"))
    if menu == 1:
        user_setup()
        login()
    elif menu == 2:
        login()
        print("test")



main()
运行程序时出现的错误:

1.new user
2.login
-1
Traceback (most recent call last):
  File "C:\Users\colin\Desktop\Python programs\Password generator.py", line 58, in <module>
    main()
  File "C:\Users\colin\Desktop\Python programs\Password generator.py", line 50, in main
    user_setup()
NameError: name 'user_setup' is not defined
1.新用户
2.登录
-1
回溯(最近一次呼叫最后一次):
文件“C:\Users\colin\Desktop\Python programs\Password generator.py”,第58行,在
main()
文件“C:\Users\colin\Desktop\Python programs\Password generator.py”,第50行,在main中
用户设置()
NameError:未定义名称“user\u setup”
main()
中将
user\u setup()
更改为
user.user\u setup()
,因为
user\u setup()
user
类的一个方法,python不会将其视为正常函数

您还需要将
login()
更改为
User.login()

但是,类是以另一种方式使用的,例如,通过将
user\u setup()
\uuuu init\uuuu()
组合起来,然后通过以下方式创建用户,可以更频繁地创建新用户:

user1 = User(...)

user\u setup
是类上的一个方法,因此您需要先实例化该方法,然后才能使用它:

user = User(name1='foo', name2='bar', age=21, username='foobar', password='secret')
user.user_setup()
user\u setup()
user
的一种方法。您需要创建一个
User
实例,然后像这样调用该方法

user = User(name1, name2, age, username, passw)
user.user_setup()
如果您想在不先实例化的情况下调用它,请将
user\u setup
a设置为

User.user_setup()

您需要创建一个用户实例,然后调用适当的方法。另外,在
\uuuu init\uuuuuu
中,您需要为参数名等指定默认值。

在使用
用户设置()之前,您需要创建一个
用户()
对象。请阅读它将不起作用,因为它是一个未绑定的方法,必须使用用户instanceinded调用它。我稍微更改了我的答案,但Fhtchitchell的答案更好