改变类变量:好的做法还是不好的做法?(Python)

3

我有一个类Foo,其中包含一个类变量size。我想在第一次创建Foo对象并将其用于所有后续对象时计算大小,但不要再次计算大小。为了将所有内容包含在Foo类中,我想出了以下代码:

class Foo(object):
    size = -1
    def __init__(self,args):
        if Foo.size < 0:
            Foo.size = some_calculation(args)

在我的小测试中,它做到了我想要的。然而,这是否被认为是良好的实践?有更好的方法来完成吗?


4
Foo.size 是否可能计算出 < 0?如果是,你可能希望将其初始化为 None,并检查 if Foo.size is None: - MrAlexBailey
3
类变量确实有它们的用途,特别是在数据需要在所有实例之间共享的情况下。所以,如果这符合您的需求并适合使用情况,那么就可以使用它。 - deceze
1
考虑到如果您以这种方式处理事情,可能会在代码的其他地方潜在地调用 Foo.size,而此时还没有初始化任何对象,从而导致 AttributeError。为了避免这个问题,可以使用 try 块,或者在类定义的一部分中将 Foo.size 初始化为 None 或者 0 - Rick
糟糕!没事:看起来你正在初始化为 -1。我没有注意到。 - Rick
1个回答

1
这并不是详尽的回答,但我想指出一些不能轻易用评论描述的事情。
像评论中说的那样,你的方法没有问题。这取决于你想做什么。
让我指出,如果将来您定义一个子类,该子类根据不同的规则/初始值计算大小,通过self.引用它可能会很有用(而不是通过类名访问)。
例如:
>>> class A:
...  size=1
...  def printsize(self):
...   print(self.size)
... 
>>> class B(A):
...  size=2
... 
>>> a=B()
>>> a.printsize()
2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接