【发布时间】:2015-11-03 10:17:46
【问题描述】:
这个问题是关于在 Python 中如何为这个类分配内存的,这个问题更多是出于好奇而不是现实价值。
以下后处理类处理大量数据(numpy 数组)。这是真实代码的简化版本,以使问题可读。来自基类的共享数据现在替换为特征长度变量。
class Reader(object):
characteristic_length = 1
def factory(type_name, file_name):
if type_name == "OFReader": return OFReader(file_name)
...
assert 0, "Bad reader instantiation: " + type_name
...
class OFReader(Reader):
def __init__(self, of_file_name):
self.file_name = of_file_name
self.read_data()
....
def length(self):
return self.data[:,0] / self.characteristic_length
...
对python处理内存的方式不熟悉,我很好奇将characteristic_length放在子类中是否会大大提高性能?
根据 python 文档,我想派生类实例有一个指向定义基类的地址的指针。如果子类中的查找失败,则在基类中继续查找。这听起来像使用基类属性来存储派生类共享的数据非常昂贵。
在实际应用程序中,共享数据是有点大的 numpy 数组,但对所有派生类都是通用的。懒惰,我想避免分别读取每个子类的数据。有关如何有效解决此问题的任何指示?
【问题讨论】: