class MyClassA(object):
def __init__(self):
entry = input("Insert a value ::: ")
b = MyClassB(entry) #To pass the variable entry to class MyClassB
c = MyClassC() #Initializied MyClassC to be ready for receive the value p
self.x = b.f #To get back the value f from MyClassB
print(self.x)
self.x1 = c.p #To get back the value f from MyClassC
print(self.x1)
class MyClassB(object):
def __init__(self, M):
self.f = M * 10 # f will contain (the value entry from MyClassA *10)
c = MyClassC(self.f) #To pass variable f to class MyClassC
class MyClassC(object):
def __init__(self,passedVar):
self.p = passedVar + 0.1 # p will contain (the value entry from MyClassB + 0.1)
h = MyClassA()
上面是我的示例代码,首先它会要求一个值并将其存储到名为entry
的变量中。
然后名为MyClassB
的第二个类将恢复entry
内的值,在处理完入口值后,新的一个将被存储到名为f
的新变量中,该变量将被传递给名为{3}的第三个类MyClassC
然后又回到头等舱。
最后,第三个类对f
值进行了一些处理,并将其存储到另一个变量p
中。
当用户运行程序时我的代码应该如何工作,这就是它的样子:
Insert a value ::: 9 (assume the user typed 9 here)
所以输出应该是:
90
90.1
不幸的是,我的问题是将值从MyClassC
传递到myClassA
并不起作用。
它说我必须从第一个类中传递两个参数,但它会在执行第2个类之后获得该值。
我认为我在初始化实例时遇到问题,是否有人可以按我描述的方式更正我的代码?
答案 0 :(得分:1)
您遇到的问题是因为MyClassC
创建了两个独立的实例,一个在MyClassA.__init__()
中,另一个在MyClassB.__init__()
中。
修复它的简单方法 - 不一定是最好的 - 是让MyClassB.__init__()
存储它在另一个实例属性中创建的MyClassC
实例,然后引用的属性当您想要检索p
的值时对象。
这就是我的意思:
class MyClassA(object):
def __init__(self):
entry = input("Insert a value ::: ")
b = MyClassB(entry) # To pass the variable entry to class MyClassB
####### c = MyClassC() # Initializied MyClassC to be ready for receive the value p
self.x = b.f # To get back the value f from MyClassB
print(self.x)
self.x1 = b.c.p # To get back the value p from MyClassC instance created in MyClassB
print(self.x1)
class MyClassB(object):
def __init__(self, M):
self.f = M * 10 # f will contain (the value entry from MyClassA *10)
self.c = MyClassC(self.f) # Pass variable f to class MyClassC and save instance
class MyClassC(object):
def __init__(self, passedVar):
self.p = passedVar + 0.1 # p will contain (the value entry from MyClassB + 0.1)
h = MyClassA()
答案 1 :(得分:0)
排队
c = MyClassC(b.f)
应该是
bool r = true;
for (int i=0; i<myArray.size() && r; i++) r &= myArray[i];
return r;
答案 2 :(得分:0)
或者您可以将值p
设置为班级MyClassC
class MyClassC(object):
def __init__(self, passedVar):
MyClassC.p = passedVar + 0.1
但请记住,这种情况可能会发生
class T(object):
def __init__(self, x):
T.x = x
if __name__ == '__main__':
t1 = T(3)
print t1.x, T.x
t1.x = 1
print t1.x, T.x
t2 = T(2)
print t1.x, t2.x, T.x
# output:
3 3
1 3
1 2 2