У меня есть класс Foo
, содержащий переменную класса size
. Я хочу рассчитать размер при первом создании объекта Foo
и использовать его для всех последующих объектов, но не рассчитать размер снова. Ради содержащий все, что в Foo
классе я придумал этот код:Изменение переменной класса: хорошая практика или нет? (Python)
class Foo(object):
size = -1
def __init__(self,args):
if Foo.size < 0:
Foo.size = some_calculation(args)
В моих маленьких тестов, это то, что я хочу. Однако считается ли это хорошей практикой? Есть ли лучший способ сделать это?
Может ли 'Foo.size' когда-либо рассчитывать на' <0'? Если это так, вы можете захотеть инициализировать как «Нет» и проверить «если Foo.size не имеет значения:« – Jkdc
Переменные класса, безусловно, имеют свое применение, особенно для случаев, когда данные разделяются во всех экземплярах ... Итак, да, если это делает то, что вы хотите, и подходит для использования, это нормально. – deceze
Считайте, что если вы так поступаете, могут возникнуть ситуации, когда вы отправляете дайвинг для 'Foo.size' в другом месте вашего кода до того, как все объекты будут инициализированы, и вы получите' AttributeError'. Чтобы избежать этой проблемы, используйте блок 'try' или инициализируйте' Foo.size' как 'None' или, возможно,' 0' как часть определения класса. –