0

我有一个类,它接受一个数组并计算一个答案。班级如下:

class Delish:
    ing = []
    rmax = []
    rmin = []
    lmax = []
    lmin = []
    answer = 0

    def rightmax(self):
        # sets rmax

    def rightmin(self):
        # sets rmin



    def leftmax(self):
        # sets lmax

    def leftmin(self):
        # sets lmin


    def calculate(self):
        #calulates answer

    def __init__(self,array):
        self.ing = list(array)
        self.rightmax()
        self.rightmin()
        self.leftmax()
        self.leftmin()
        self.calculate()

现在这给出了输出 4 13 (这是正确的)

b = Delish([1,1,-1,-1])
a = Delish([1,2,3,4,5])


print a.answer,b.answer

这给出了输出 7 13 (这是错误的)

a = Delish([1,2,3,4,5])
b = Delish([1,1,-1,-1]) 

print a.answer,b.answer

我不能放完整的代码,因为它是现场编程竞赛的一部分。但我想知道是什么导致了这种奇怪的行为。所有的方法都对自己起作用。仅变量。因此,所有对象都应该相互独立,对吗?

如果它没有提供太多算法,我可以添加细节。谢谢你。

4

2 回答 2

0

在 Python 中,在构造函数中声明实例变量

你实际上在做的是声明类变量。如果你想要Python 中的实例变量,你需要在你的构造函数中声明它们:

class Delish:
  # This is a class variable. 
  # All instances can refer to this as self.foo
  foo = 42 

  def __init__(self,array):
    self.ing = [] # This is an instance variable
    self.rmax = []
    self.rmin = []
    self.lmax = []
    self.lmin = []
    self.answer = 0
    self.ing = list(array)
    self.rightmax()
    self.rightmin()
    self.leftmax()
    self.leftmin()
    self.calculate()
于 2013-06-12T09:55:53.253 回答
0

您可能是 C++/Java 程序员。

您的所有字段,除了在ing中分配并因此被覆盖的字段外__init__,都是类字段,也就是说,它们在您的类的所有实例之间共享。将您的实例初始化移动到__init__

class Delish:
    # Nothing here

    def __init__(self, array):
        self.ing = list(array)
        rmax = []
        rmin = []
        lmax = []
        lmin = []
        answer = 0

        self.rightmax()
        self.rightmin()
        self.leftmax()
        self.leftmin()
        self.calculate()
于 2013-06-12T09:56:30.847 回答