如何优化python类中的频繁读取方法



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

请注意,这个隐藏属性在每个类实例中只填充一次(在访问属性时(。如果需要更频繁的刷新,可以在属性中配置一些日期时间逻辑。

最新更新