尝试在类上做一些优化。我们尽量不改变太多的类定义。本质上,我们实例化了ClassA
N
次,但其中一个方法的文件读取很糟糕。你知道吗
for x in range(0, N):
cl = ClassA()
cl.dostuff(x)
这个班看起来像这样:
class ClassA:
def dostuff(self, x):
#open nasty file here
nastyfile = open()
do something else
我们可以将从类中读取的文件带出并放在循环之前,因为文件不会更改。但是有没有一种方法可以确保我们只为类的实例打开一次讨厌的文件呢。例如,在类的第一个实例上,它是为类的所有未来实例定义的,而不必再次读入。有没有一种方法可以在当前表单中实现这一点,而不必对现有代码库的结构进行太多更改。你知道吗
有一个问题与解释器有关,即python是否足够聪明,可以像nastyfile一样缓存变量,这样我们就按原样做了,或者快速而肮脏的解决方案是:
nastyfile = open()
for x in range(0, 1):
cl = ClassA()
cl.dostuff(x)
想找个Python的方法来做这个。你知道吗
实例可以自己访问和修改类属性。因此,您只需在类上设置一个属性并为其提供一个默认(None)值,然后在dostuff中执行任何操作之前检查该值。示例:
nastyfileinfo也被认为是实例的一个属性,因此您可以用实例来引用它。nastyfileinfo,但是如果您在那里修改它,它将只更新该特定实例,而如果您在类上修改它,所有其他实例都可以看到它(前提是它们没有更改对nastyfileinfo的个人/自我引用)。你知道吗
您可以将打开文件封装在
classmethod
中。你知道吗这种方法依赖于这样一个事实:如果在实例上找不到属性,属性查找将尝试在类上查找属性。你知道吗
如果希望在实例化第一个实例时打开它,可以将此检查/实例化放在
__init__
函数中。你知道吗请注意,此方法将使文件保持打开状态,因此需要在某个时候关闭文件。
您可以有一个类方法,在第一个实例请求时打开该文件。我把它包在锁里,这样它就安全了。你知道吗
相关问题 更多 >
编程相关推荐