简体   繁体   English

如何在函数内部调用函数?

[英]How do I call a function inside a function?

import datetime

class User:

    def __init__(self, username, mail, date_of_birth, gender, password):
        self.username = username
        self.mail = mail
        self.date_of_birth = datetime.datetime.strptime(date_of_birth, "%d.%m.%Y").date()
        self.gender = gender
        self.password = password

    def get_username(self):
        return self.username

    def get_mail(self):
        return self.mail

    def get_date_of_birth(self):
        return self.date_of_birth
    def get_gender(self):
        return self.gender

    def get_password(self):
        self.password

    def get_date(self):
        return self.date_of_birth

    log = ""


    def login2(self):

        global log
        log = input("input your username: ")
        if log == self.username:
            pwrd = input("whats your password?")
            if pwrd == self.password:
                print("Logged in!")


    @staticmethod
    def login_or_register():

        global log

        log = input("login or register: ")
        if log == "login" or "Login":
            login2()

Matt = User("Matterson", "matt@gmail.com", "21.12.1999" ,"male", "Password987")
session1 = User.login_or_register()

So the login2() wont work for some reason.所以由于某种原因 login2() 不会工作。 Could someone help me out?有人可以帮我吗?

I'm not sure of your intent, but you could make this a class method that creates an instance of its class.我不确定您的意图,但您可以将其设为创建其类实例的类方法。

@classmethod
def login_or_register(cls):
    log = input("login or register: ")
    if log == "login" or "Login":
        user = cls()
        user.login2()
        return user

But from the way you use it但从你使用它的方式来看

Matt = User("Matterson", "matt@gmail.com", "21.12.1999" ,"male", "Password987")
session1 = User.login_or_register()

I think it should just be a regular method我认为它应该只是一种常规方法

def login_or_register(self):
    log = input("login or register: ")
    if log == "login" or "Login":
        self.login2()

You can't call an instance method from a class method.不能从类方法调用实例方法。 Login2 can be an instance method as well. Login2 也可以是一个实例方法。 Then instead of calling it statically, call it on the Matt instance as follows.然后不是静态调用它,而是在 Matt 实例上调用它,如下所示。

import datetime

class User:

    def __init__(self, username, mail, date_of_birth, gender, password):
        self.username = username
        self.mail = mail
        self.date_of_birth = datetime.datetime.strptime(date_of_birth, "%d.%m.%Y").date()
        self.gender = gender
        self.password = password

    def get_username(self):
        return self.username

    def get_mail(self):
        return self.mail

    def get_date_of_birth(self):
        return self.date_of_birth
    def get_gender(self):
        return self.gender

    def get_password(self):
        self.password

    def get_date(self):
        return self.date_of_birth

    log = ""


    def login2(self):

        global log
        log = input("input your username: ")
        if log == self.username:
            pwrd = input("whats your password?")
            if pwrd == self.password:
                print("Logged in!")

    def login_or_register(self):

        global log

        log = input("login or register: ")
        if log == "login" or "Login":
            self.login2()

Matt = User("Matterson", "matt@gmail.com", "21.12.1999" ,"male", "Password987")
session1 = Matt.login_or_register()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM