在类和实例

时间:2016-04-12 13:39:14

标签: python python-2.7 class python-3.x

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个类之后获得该值。 我认为我在初始化实例时遇到问题,是否有人可以按我描述的方式更正我的代码?

3 个答案:

答案 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