在Python类中声明变量哪个更好?

时间:2013-10-10 09:26:37

标签: python function class variables self

当我编写一个类时,我在__init__方法中声明了一些变量,在其他函数中声明了一些变量。所以,我通常最终得到这样的东西:

class Foo:
    def __init__(self,a, b):
        self.a=a
        self.b=b
    def foo1(self,c, d)
        sum=self.a+self.b+c+d
        foo2(sum)
    def foo2(self,sum)
        print ("The sum is ", sum)

我发现这种方式有点混乱,因为很难跟踪所有变量。相反,在__init__方法中声明变量时,管理变量变得更加容易。因此,我们不会使用以前的表单,而是:

class Foo:
    def __init__(self,a, b, c, d, sum):
        self.a=a
        self.b=b
        self.c=c
        self.d=d
        self.sum=sum
    def foo1(self)
        self.sum=self.a+self.b+self.c+self.d
        foo2(self.sum)
    def foo2(self)
        print ("The sum is ", self.sum)

您会选择哪一个?为什么?您认为在__init__方法中声明类的所有函数的所有变量是更好的做法吗?

2 个答案:

答案 0 :(得分:5)

您的sum是计算值的良好候选者,即类似于类变量(非方法)的方法。这可以通过@property

完成
class Foo(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def sum(self)
        return self.a + self.b

f = Foo(1, 2)
print 'The sum is' + f.sum

http://docs.python.org/2/library/functions.html#property

答案 1 :(得分:4)

至少有三个方面:

  • 从设计的角度来看,构造函数应该只定义变量,这些变量至少在类中的两个方法中使用,或者传达您尝试建模的东西的基本特征。
  • 从性能的角度来看,您应该使用可能范围最小的变量,它会保存查找。
  • 保持变量本地化,使认知负荷保持在低水平。