【问题标题】:Changing class variable: good practice or not? (Python)更改类变量:好的做法与否? (Python)
【发布时间】:2016-05-19 12:32:05
【问题描述】:

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

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

在我的小测试中,它可以满足我的需求。但是,这被认为是好的做法吗?有没有更好的方法?

【问题讨论】:

  • 可以Foo.size 计算出到&lt; 0 吗?如果是这样,您可能希望初始化为 None 并检查 if Foo.size is None:
  • 类变量当然有它们的用途,特别是在所有实例之间共享数据的情况下......所以,是的,如果这符合您的要求并且适合用例,那很好。跨度>
  • 请考虑,如果您以这种方式进行操作,有时您可能会在初始化任何对象之前在代码中的其他地方搜索Foo.size,您将得到一个AttributeError。为避免此问题,请使用 try 块,或将 Foo.size 初始化为 None0 作为类定义的一部分。
  • 哎呀!没关系:看起来您正在初始化为-1。没注意到。

标签: python class oop class-variables


【解决方案1】:

这绝不是一个详尽的答案,但我想指出一些我无法在评论中轻松描述的内容。

正如 cmets 中所说,您的方法没有任何问题。 这取决于你想做什么。

让我指出,如果将来您最终定义了一个根据不同的规则/初始值计算 size 的子类,通过 self. 引用它可能会很有用(而不是到达它通过类名)

例如

>>> class A:
...  size=1
...  def printsize(self):
...   print(self.size)
... 
>>> class B(A):
...  size=2
... 
>>> a=B()
>>> a.printsize()
2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2013-03-25
    • 2019-01-15
    • 2011-08-06
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多