【发布时间】:2020-01-15 06:58:34
【问题描述】:
假设我有以下代码:
import pandas as pd
import cx_Oracle
class Foo:
instances = []
def __init__(self, id, name):
self.id = id
self.name = name
dsn_tns = cx_Oracle.makedsn('***', '***', service_name='***')
conn = cx_Oracle.connect(user=r'***', password='***', dsn=***)
self.data = pd.read_sql(***, conn)
conn.close()
Foo.instances.append(self)
def method1(...):
...
def method2(...):
...
one = Foo(1, 'one')
我创建一个类并初始化该类的一个(或可能更多)实例。
在这种情况下,我从 Oracle 服务器导入一些数据,这需要很长时间才能运行 SQL 查询。
假设我在我的对象上运行 method1:
one.method1...
运行此语句后,我决定要在其中一个上使用方法 2:
one.method2...
现在我将不得不再次运行代码,它必须将一个重新初始化为 Foo 类的实例,这将强制 SQL 查询重新运行,这需要时间。它还会在一个也可能需要很长时间的方法上重新运行 method1。
我是初学者,所以我想知道最好的解决方法是什么?
类似于将一个存储在内存中,因此当我重新运行代码时,它不必再次初始化并将该方法直接应用于内存中的对象?
还有一种方法可以存储method1的潜在输出,所以当我运行时
one.method1
one.method2
如果之前已经运行过one.method1,则不必重新执行。
显然,这对于运行速度很快的东西来说不是问题,而是在一个类中有许多方法和许多对象以及许多类等的代码上。我可以想象这会变得不堪重负。
我确信确实存在解决方案和最佳做法,但我正在努力寻找有关此问题的帮助。
我怀疑这是所有 OOP 的普遍现象,而不仅仅是 python。
谢谢。
【问题讨论】:
-
删除
Foo.instances.append(self)使self.data成为class variable并运行所有oracle依赖条件仅在第一次时间。例如if not Foo.data: ...
标签: python python-3.x oop methods