-1

我有以下课程:

class Login():
    #PROMPT THE OPERATOR TO LOGIN
    def login(self):
        self.usr = input("usr> ")
        self.pwd = getpass.getpass("pwd> ")
        self.check_login()

我也有这门课:

class Kernel(Login):
    #THIS IS WHERE THE OPERATOR CAN ENTER STUFF AND SHIT.
    def kernel(self):
        obj = Login()
        kernel_input = input(obj.login.self.usr + "@" + OS_NAME.lower() + ">")

但是,我不知道如何从类Login获取变量self.usr以在类Kernel上工作,该类是Login的子类。

如您所见,我创建了 Login() 对象并将其存储到变量obj中。在 Login 类中,有一个名为login的方法,其中包含一个名为usr的 self 变量。

我尝试使用以下方法在另一个类中调用它:

obj.usr
obj.self.usr
obj.login.usr
obj.login.self.usr

但这些都不起作用。我怎样才能使这项工作?

4

3 回答 3

1

obj.usr是正确的方法。但是,直到调用对象的login方法之后,该属性才会存在。Login您需要执行以下操作:

obj = Login()
obj.login()
# now you can use obj.usr

login()如果不确切知道您的类是如何使用的(例如,当 Login 对象的登录“应该”发生时),很难确切地知道您应该在什么时候调用。另一种可能性是您实际上想要在 Login 类中设置usr和,因此一旦创建对象,它们就存在。pwd__init__

于 2013-09-08T22:35:54.647 回答
0

usr属性仅在您调用该login方法时设置。您需要调用它来设置要使用的属性obj.login()。然后您可以使用obj.usr.

基于 Kernel 是 的子类这一事实,在方法Login中创建另一个Login对象可能没有任何好处kernel,您可以调用self.login()and self.usr

另外,我猜您可能来自另一种语言,其中与类同名的方法是构造函数?在 Python 中不是这样,构造函数被称为__init__.

于 2013-09-08T22:35:16.757 回答
-1

创建一个全局定义的字典。前任:

mydict = dict()
class Login():
    #PROMPT THE OPERATOR TO LOGIN
    def login(self):
        self.usr = input("usr> ")
        self.pwd = getpass.getpass("pwd> ")
        mydict.update({'password':self.pwd, 'user': self.usr})
        self.check_login()

class Kernel(Login):
    #THIS IS WHERE THE OPERATOR CAN ENTER STUFF AND SHIT.
    def kernel(self):
        kernel_input = input(mydict['user'] + "@" + OS_NAME.lower() + ">")
于 2013-09-08T22:38:00.237 回答