python导入和定义的类之间的区别

时间:2012-03-14 20:59:46

标签: python class import

我想在实例的某些参数之间创建依赖关系(不一定与示例中的同一个类)。我提出了以下代码,直到我决定将其移入模块并通过导入来使用它。

class objectD(object):
  def __init__(self,val1,val2,val3):
    self.val1 = val1
    self.val2 = val2
    self.val3 = val3

  def __str__(self):
    return str(str(self.val1)+","+str(self.val2)+","+str(self.val3))

  def dependence(self,dependent):
    print "values val1 and val2 of "+str(self)+" now depend on "+dependent
    self.val1 = eval(dependent).val1
    self.val2 = eval(dependent).val2
    self.dependent = dependent

  def update(self):
    self.val1 = eval(self.dependent).val1
    self.val2 = eval(self.dependent).val2

#test
obj1 = objectD(350,4,500)
print obj1
obj2 = objectD(230,1,1000)
print obj2
obj2.dependence("obj1")#problem with imported class occurs there
print obj2
obj1.val1 = 1315
obj1.val2 = 6464
print obj1
obj2.update()
print obj2

问题似乎在于将依赖性分配给实例,根据python使用类的导入版本根本不存在。在我看来,实例上的调用方法依赖()继续在模块中而不是在我的脚本中。 有没有办法以某种方式修复导入,或者可能有一些不同的方法来创建依赖项?

1 个答案:

答案 0 :(得分:0)

不应该eval。为什么不简单地这样做呢?

class objectD(object):
  def __init__(self,val1,val2,val3):
    self.val1 = val1
    self.val2 = val2
    self.val3 = val3

  def __str__(self):
    return str(str(self.val1)+","+str(self.val2)+","+str(self.val3))

  def dependence(self,dependent):
    print "values val1 and val2 of "+str(self)+" now depend on "+dependent
    self.val1 = dependent.val1
    self.val2 = dependent.val2
    self.dependent = dependent

  def update(self):
    self.val1 = self.dependent.val1
    self.val2 = self.dependent.val2

#test
obj1 = objectD(350,4,500)
print obj1
obj2 = objectD(230,1,1000)
print obj2
obj2.dependence(obj1)#problem with imported class no longer occurs there
print obj2
obj1.val1 = 1315
obj1.val2 = 6464
print obj1
obj2.update()
print obj2

这将按预期工作,因为dependent仅存储对obj1的引用,而不是对象本身的状态。因此,对update()的调用实际上会提取新值。