首页 > 解决方案 > 在另一个类中创建一个类对象

问题描述

我正在尝试创建一个类对象并在类对象中Credentials执行该方法:get_username_passwordSession

class Credentials:
    def __init__(
            self,
            username=None,
            password=None,
            client_id=None,
            client_secret=None):

        self.username = username
        self.password = password
        self.client_id = client_id
        self.client_secret = client_secret

    def get_username_password(self):
        self.username = input("please enter your username: ")
        self.password = input("please enter your password: ")

class Session:
    def __init__(
            self):

        self.credentials = Credentials()
        self.credentials = self.credentials.get_username_password()

if __name__ == "__main__":
    a = Credentials()
    a.get_username_password() 
    b = Session()

如果我用b,b.credentials是一个None类型对象。

标签: pythonpython-3.x

解决方案


你好,史蒂芬。我希望你一切都好。

您的问题的症结在于您正在实例化两个单独的Credentials对象。您实例a化为一个Credentials对象,然后在该对象中实例化一个SEPARATECredentialsSession对象。

我知道有几个解决这个问题的方法。



1. 将凭证对象作为初始化参数传递给 Session 对象。


class Credentials:
    def __init__(
            self,
            username=None,
            password=None,
            client_id=None,
            client_secret=None):

        self.username = username
        self.password = password
        self.client_id = client_id
        self.client_secret = client_secret

    def get_username_password(self):
        if not self.username:
            self.username = input("please enter your username: ")
        if not self.password:
            self.password = input("please enter your password: ")

class Session:
    def __init__(
            self,
            credentials=None):
        if credentials:
            self.credentials = credentials
        else:
            self.credentials = Credentials()

        if not (credentials.username and credentials.password):
            self.credentials.get_username_password()

if __name__ == "__main__":
    a = Credentials()
    b = Session(credentials=a)

2. 用 ** 创建一个单例类Credentials。这意味着您只有一个代表整个类的对象。换句话说,无论您在哪里实例化它,您都可以访问相同的单个Credentials属性实例。如果您想进一步调查,这里有一个教程。我不认为这是你想要达到的目标。**


3. 可能还有其他选择。我并不精通所有方法。



我希望这有帮助!祝你好运!


推荐阅读