我有以下课程:
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
但这些都不起作用。 我怎么能做这个工作?
答案 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() + ">")