函数(属性)python的函数

时间:2012-07-23 09:38:05

标签: python numpy

我有一个Python类,其函数和属性如下:

@property
def xcoords(self):
    ' Returns numpy array. '
    try:
        return self.x_coords
    except:
        self.x_coords = self._read_coords('x')
        return self.x_coords

def _read_coords(self, type):
    # read lots of stuff from big file
    return array

这允许我这样做:data.xcoords,简单明了。

我想保持原样,但是我想定义允许我这样做的功能:

    data.xcoords.mm
    data.xcoords.in

我该怎么办?我还希望这些函数适用于类的其他属性,例如data.zcoords.mm

1 个答案:

答案 0 :(得分:3)

如果您真的希望xcoords返回numpy数组,那么人们可能不希望xcoords的值具有mmin_方法。您应该考虑mmin_数组本身的真正属性,还是它们是您定义的类的属性。在后一种情况下,我建议不要对子类ndarray进行子类化 - 只需将它们定义为包含类的方法。

另一方面,如果这些肯定是xcoords返回的东西的属性,那么子类化ndarray是一种合理的方法。请务必按照in the docs所定义的__new____array_finalize__来做到正确。

要决定是否应该继承ndarray,您可以考虑是否可以看到自己在程序的其他地方重用此类。 (你实际上 t,那么这些可能是包含类的属性。这里的推理线是 - 根据函数思考 - 如果你有一个简短的函数foo和一个短函数bar,并且知道你将从不调用除foo(bar(x))以外的任何其他方式,你可能最好不要写foo_bar。同样的逻辑适用于类。

最后,正如larsmans指出的那样,in是python中的关键字,因此在这种情况下不可用(这就是我上面使用in_的原因)。