Нет ничего плохого в том, что вы сделали, если somefunction
не займет много времени, чтобы вернуться.Как правило, вы обычно не хотите, чтобы создание / создание объекта занимало много времени.Если для вычисления этого атрибута требуется много времени, вы должны сделать это при первом обращении к атрибуту.И это можно сделать с помощью методов получения свойств.
import time
class Foo(object):
def __init__(self, parameter):
self._one = None
self.two = "some_string"
self._parameter = parameter
@property
def one(self):
if self._one is None:
self.one = self._some_method()
return self.one
def some_method(self):
time.sleep(10)
return sorted(self._parameter)
При вызове foo.one
Python проверит, является ли атрибут "protected" по-прежнему None
.Если это так, , то вызовет дорогой вызов функции.При следующей попытке доступа к нему будет использовано сохраненное значение.