Изменение переменной класса: хорошая практика или нет? (Python)

У меня есть класс Foo, содержащий переменную класса size, Я хочу рассчитать размер при первом создании Foo Объект и использовать то же самое для всех последующих объектов, но не рассчитать размер снова. Ради сдерживания всего в пределах Foo класс я придумал этот код:

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

В моих маленьких тестах он делает то, что я хочу. Однако считается ли это хорошей практикой? Есть ли лучший способ сделать это?

1 ответ

Это ни в коем случае не исчерпывающий ответ, но я хотел бы указать на то, что я не могу легко описать в комментарии.

Как сказано в комментариях, нет ничего плохого в вашем подходе. Это зависит от того, что вы хотите сделать.

Позвольте мне указать, что в случае, если в будущем вы определите подкласс, который вычисляет size в соответствии с другим правилом / начальным значением, может быть полезно обратиться к нему через self. (вместо того, чтобы достичь его через имя класса)

например

>>> class A:
...  size=1
...  def printsize(self):
...   print(self.size)
... 
>>> class B(A):
...  size=2
... 
>>> a=B()
>>> a.printsize()
2
Другие вопросы по тегам