0

我的代码中有以下类结构:
超类 A,它基本上是子类 B 中的对象列表。A 类有一个方法 meth,它创建一个变量 var(通过从文件中读取) . 变量var需要子类B的方法可以访问,问题是初始化a = A()后,var是实例a的一个属性,子类方法不能使用super( )。var 是一个大型浮点数组(大约 1e5 个元素),所以我试图通过不使其成为 B 实例的属性(n 次!)或将其显式传递给 methB 来最小化内存使用量。

class A(object):
  def __init__(self,n):
    self.data = [B() for _ in xrange(n)]

  def __getitem__(self,n):
    return self.data[n]

  def methA(self):
    with open('file.txt','r') as fp:
      self.var = fp.readlines()

class B(A):
  def __init__(self):
    self.derived_var = []

  def methB():
    '''This method needs to use var defined in meth of A above.'''

a = A(5)
a.methA()
for b in A:
  b.methB()

这在python中是可能的还是编码不好?

4

3 回答 3

1

首先,我没有看到定义BA. 它们似乎不共享功能,并且您在Band之间A(在 的构造函数中A)创建循环引用,这可能会导致问题。

现在至于你的问题。只是传递a.var给有问题methB吗?像这样:

class B(A):
  def __init__(self):
    self.derived_var = []

  def methB(self, var):
    # some code

a = A(5)
a.meth()
for b in A:
  b.methB(a.var)
于 2013-07-25T10:55:41.560 回答
0
def methB(self):
    super(B, self).meth()
    print self.var

使用super()可以帮助您获取超类中定义的属性。但是继承应该是一个is-one关系。你的设计不好。

于 2013-07-25T10:53:59.450 回答
0

当函数足够时不要使用类:

with open('file.txt','r') as fp:
    var = fp.readlines()

for _ in xrange(5):
    funcB()

简单多了。如果你确实想使用一个类,你需要向我们展示为什么使用一个类是可取的。

于 2013-07-25T11:00:05.120 回答