MyClass
中定义了许多方法需要调用read_my_obj
,下面的代码是避免每次都重新创建一个新的MyObjectType实例以节省内存和提高执行速度的好方法吗?或者有没有一种更像蟒蛇的方式来实现这种模式?
class MyClass:
my_obj: Optional[MyObjectType] = None
@classmethod
def read_my_obj(cls) -> MyObjectType:
if cls.my_obj is not None:
return cls.my_obj # treating my_obj as a singleton, to avoid instantiating a new one each time
obj_field = read_from_db()
cls.my_obj = MyObjectType(obj_field) # instantiate my object for first time
return cls.my_obj
我会使用隐藏属性+属性来实现"运行时间";实例化对象的缓存:
class MyClass:
def __init__(self):
self._my_obj = None # hidden attribute begins with an underscore
@property
def my_obj(self): -> MyObjectType
# Create if not exists
if not self._my_obj:
obj_field = read_from_db()
self._my_obj = MyObjectType(obj_field)
# return hidden attribute
return self._my_obj
请注意,这个隐藏属性在每个类实例中只填充一次(在访问属性时(。如果需要更频繁的刷新,可以在属性中配置一些日期时间逻辑。