如何从另一个类中获取变量?

时间:2013-09-08 22:33:04

标签: python class oop variables

我有以下课程:

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() + ">")

但是,我不知道如何从类登录获取变量 self.usr 来处理类 Kernel ,这是一个孩子到班级登录

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

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

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

但这些都不起作用。 我怎么能做这个工作?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

另外,我猜你可能会来自另一种语言,其中一个具有相同名称的方法是构造函数?在Python中并非如此,构造函数称为__init__

答案 2 :(得分:-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() + ">")