如何在python中使用对象名作为变量

时间:2015-07-16 14:09:46

标签: python oop subclassing

我如何定义一个类,使对象名可以用作变量?我正在编写一个数值分析类,它只包含一个numpy数组作为即时变量和许多数学运算。为了方便和可读性,仅仅通过它的对象名访问numpy数组会很不错。例如,可以直接调用numpy数组(或来自matplotlib,pandas等许多其他包的对象),

import numpy as np

foo = np.array([[1,2],[3,4]])
print foo

这就像我所拥有的那样(省略了定义方法)

import numpy as np

class MyClass():
  def __init__(self, input_array):
    self.data = np.array(input_array)

foo = MyClass([[1,2],[3,4]])
print foo
print foo.data

这会将 foo 打印为 foo.data 的指针和内容

<__main__.MyClass instance at 0x988ff0c>
[[1 2]
 [3 4]]

我在构造函数中尝试了self = np.array(input_array),但它仍然提供了一个地址。我在想像重载对象名称,但我找不到任何信息。

如果不可能,那么这些包怎么能实现呢?我试着读一些numpy和pandas的源代码。但作为python的新手,我几乎不可能在那里找到答案。

修改

感谢CoryKramer和ŁukaszR。建议使用__str____repr__。但我意识到我真正需要的是继承numpy.ndarray甚至是pandas DataFrame,以便继承所有数学函数。我发现这两个链接非常有用,for ndarrayfor DataFrame,用于调用__init__我的界面。

1 个答案:

答案 0 :(得分:5)

如果您希望能够以可打印的方式表示您的类对象,则可以定义__str__方法

class MyClass():
    def __init__(self, input_array):
        self.data = np.array(input_array)
    def __str__(self):
        return str(self.data)

>>> foo = MyClass([[1,2],[3,4]])
>>> print(foo)
[[1 2]
 [3 4]]

另外,您可以see here详细讨论何时适合您的课程使用__repr__ vs __str__