我如何定义一个类,使对象名可以用作变量?我正在编写一个数值分析类,它只包含一个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 ndarray和for DataFrame,用于调用__init__
我的界面。