gpt4 book ai didi

python - 我应该重载什么函数来自定义打印输出?

转载 作者:行者123 更新时间:2023-11-30 23:37:43 28 4
gpt4 key购买 nike

我有一个来自 numpy.ndarray 的子类,它修改了按索引获取项目的行为。但是,当有人在我的子类上进行打印时,我想保留原始的 ndarray 输出格式。我尝试重写 __iter__ 函数,但似乎不起作用。考虑到 __getitem__ 重载,是否可以按底层数组顺序打印输出数字?

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 返回对象 __str__ 方法。

所以你需要 ovveride __str__

>>> class ex():
def __init__(self, value):
self.val = value
def __str__(self):
return self.val * 2


>>> a = ex('A')
>>> print a
AA

关于python - 我应该重载什么函数来自定义打印输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220359/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com