我正在尝试从另一个类中更改以下代码中的self.var_1
,但收到错误test1 has no attribute 'var_1'
。我觉得我犯了一个简单的错误,但似乎找不到问题。
class test1:
def __init__(self):
self.var_1 = "bob"
instance2 = test2()
def change_var(self, new_var):
print(self.var_1) #should print "bob"
self.var_1 = new_var #should change "bob" to "john"
print(self.var_1) #should print "john"
class test2:
def __init__(self):
test1.change_var(test1, "john")
instance = test1()
答案 0 :(得分:3)
var_1
是一个实例变量,因此您需要使用该实例:
class test1:
def __init__(self):
self.var_1 = "bob"
instance2 = test2(self) # <<<<<< pass test1 instance
def change_var(self, new_var):
print(self.var_1) #should print "bob"
self.var_1 = new_var #should change "bob" to "john"
print(self.var_1) #should print "john"
class test2:
def __init__(self, t1obj): # <<<< take test1 instance
t1obj.change_var("john") # <<<< use test1 instance
instance = test1()
礼物:
bob
john
答案 1 :(得分:1)
根据您的评论,我觉得您正在为课程创建singleton pattern。
有多种方法可以完成此操作,大多数方法可以在above SO question中找到。
我创建了一个装饰器,并将其应用于您的班级,从而使用了答案中概述的第一种方法。
def singleton(class_):
instances = {}
def getinstance(*args, **kwargs):
if class_ not in instances:
instances[class_] = class_(*args, **kwargs)
return instances[class_]
return getinstance
@singleton
class Test1(object):
def __init__(self):
self.var_1 = "bob"
def change_var(self, new_var):
print(self.var_1) #should print "bob"
self.var_1 = new_var #should change "bob" to "john"
print(self.var_1) #should print "john"
class Test2(object):
def __init__(self):
test1 = Test1()
test1.change_var("john")
Test2()
您可以在repl.it上查看此结果,并查看结果与您的输出相匹配。
鲍勃
约翰