Python 我应该重载什么函数来自定义打印输出?
我有一个子类来自numpy.ndarray,它修改了按索引获取项的行为。但是,当有人打印我的子类时,我希望保留原始的ndarray输出格式。我试图重写_uiter _;函数,但似乎不起作用。如果uuGetItem_uuuuuuuuuuuuuuuuuuuuu过载,是否可以按底层数组顺序打印输出数字Python 我应该重载什么函数来自定义打印输出?,python,numpy,Python,Numpy,我有一个子类来自numpy.ndarray,它修改了按索引获取项的行为。但是,当有人打印我的子类时,我希望保留原始的ndarray输出格式。我试图重写_uiter _;函数,但似乎不起作用。如果uuGetItem_uuuuuuuuuuuuuuuuuuuuu过载,是否可以按底层数组顺序打印输出数字 import numpy as np class imarray(np.ndarray): def __new__(cls, d, f): nd = np.asarray(d)
import numpy as np
class imarray(np.ndarray):
def __new__(cls, d, f):
nd = np.asarray(d)
return super(imarray, cls).__new__(cls,(nd.size,), dtype=nd.dtype, buffer=nd).view(imarray)
def __init__(self, d, f):
self.f = f
def __array_finalize__(self, o):
pass
def __getitem__(self, i):
return super(imarray, self).__getitem__(self.f(i))
def __setitem__(self, i, y):
return super(imarray, self).__setitem__(self.f(i), y)
def __iter__(self):
return super(imarray, self).__iter__
if __name__ == "__main__":
a = imarray([1., 2., 3.1415], lambda i:i+1)
print a[0] # print .2
a[-1] =.4
print a[-1] # print .4
print a # print [ 2. 3.1415 0.4 ] but want [ 0.4 2. 3.1415 ]
Print返回objects
\uuu str\uu
方法
因此,您需要验证\uuuu str\uuuu
>>> class ex():
def __init__(self, value):
self.val = value
def __str__(self):
return self.val * 2
>>> a = ex('A')
>>> print a
AA
这实际上要视情况而定
如果打印一个对象,print
将调用它的\uuuu str\uuu
方法
但是,如果您打印列表
(或集
或dict
),则打印
将调用列表的\uuuuu str\uuuu
方法,该方法反过来将调用项的\uuu repr\uuuuu
方法。这很奇怪,但很容易观察到:
>>> class B():
... def __repr__(self): return '__repr__'
... def __str__(self): return '__str__'
...
>>> print B()
__str__
>>> print [B()]
[__repr__]
>>> print set([B()])
set([__repr__])
>>> print {B(): B()}
{__repr__: __repr__}
,@InbarRose:_str_u和_repr_u不将索引作为参数。所以我不知道如何修改打印的行为。我假设print在数组中从0循环到N。在上面的例子中,我需要它显示元素,就像从-1循环到N-1一样。所以我看不出str和repr如何解决这个问题。也许我误解了什么?