我正在做一些工作,并且不断遇到问题。我尝试了大约一个小时来解决这个问题,但我无法解决。 这是我的问题的简化版本;
import random
class class1(object):
def __init__(self):
super(class1,self).__init__()
self.createX()
def createX(self):
self.x = random.randint(1,20)
class class2(class1):
def __init__(self):
super(class2,self).__init__()
self.n = 4
def create(self):
self. n = self.n + self.x
class main(object):
def __init__(self,c,c2):
self.x = c
self.n = c2
self.x = self.x.x
self.n = self.n.n
self.print()
self.createnew()
self.print()
def print(self):
print('x=',self.x)
print('n',self.n)
def createnew(self):
c = class1()
c2 = class2()
c2.create()
c = class1()
c2 = class2()
c2.create()
m = main(c,c2)
我上了3堂课。 Class1只是使用随机函数创建一个名为self.x的变量。 下一个class2创建另一个名为self.n的变量。这两个类使用继承互连,到目前为止,一切正常。然后,我有一个主类,该主类从其他类中获取所有变量,并在其自己的类中使用它。它具有两个功能:一个会打印,另一个会再次调用类。 当我运行程序时,将打印此内容:
x= 7
n 7
x= 7
n 7
即使我在主类中使用“ createnew”功能调用了创建它们的类,我也不明白为什么第二轮x和n不会更改值。
我们非常感谢您的帮助。谢谢
答案 0 :(得分:5)
createnew()
没有意义。它会创建新的局部变量并将其丢弃。
def createnew(self):
c = class1()
c2 = class2()
self.c2.create()
c
和c2
仅在createnew
本地。它们与创建c
类实例的c2
和main
没有关系,并且不会更改。
您应保留对“原始” c
和c2
的引用:
class main(object):
def __init__(self,c,c2):
self.c = c
self.c2 = c2
self.x = self.c.x
self.n = self.c2.n
def createnew(self):
self.c = class1()
self.c2 = class2()
self.c2.create()
self.x = self.c.x
self.n = self.c2.n
您可以不保留c
和c2
而只更新self.x
和self.n
,但是这有点奇怪:
class main(object):
def __init__(self, c, c2):
self.x = c
self.n = c2
self.x = self.x.x
self.n = self.n.n
def createnew(self):
c = class1()
c2 = class2()
c2.create()
self.x = c.x
self.n = c2.n
答案 1 :(得分:1)
已经有一个很好的答案,解释为什么这不起作用。 我遇到了同样的问题,并找到了一种始终可以工作并链接不同类的方法:
var y = x.Where(i => i % 2 == 0);
为此,您需要一个MainClass来保持与所有其他类的连接。它创建对Class1和Class2的引用,并将自身作为参数传递给这些类。