【问题标题】:Passing values between class and instance在类和实例之间传递值
【发布时间】:2016-04-12 13:39:13
【问题描述】:
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的新变量中,该变量将传递给名为MyClassC的第三类,然后也返回到头等舱。 最后,第三个类对f 值进行一些处理,并将其存储到另一个变量p

当用户运行程序时,我的代码应该是这样工作的,这就是它的样子:

Insert a value ::: 9 (assume the user typed 9 here)

所以输出应该是:

90
90.1

不幸的是,我的问题是将值从MyClassC 传递给myClassA 不起作用。 它说我必须从第一类传递两个参数,但它会在执行第二类后获得值。 我认为我在初始化实例时遇到问题,有人可以更正我的代码以按照我描述的方式工作吗?

【问题讨论】:

  • 添加了答案,您缺少输入..
  • 您不应该使用__init__ 进行输入/输出。

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


【解决方案1】:

您遇到的问题是因为创建了两个独立的 MyClassC 实例,一个在 MyClassA.__init__() 中,另一个在 MyClassB.__init__() 中。

修复它的简单方法(不一定是最好的)是让MyClassB.__init__() 将它创建的MyClassC 实例存储在另一个实例属性中,然后引用 that的属性> 对象时要检索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()

【讨论】:

    【解决方案2】:

    排队

     c = MyClassC()
    

    应该是

     c = MyClassC(b.f)
    

    【讨论】:

      【解决方案3】:

      或者您可以将值 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 2014-05-11
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多