请看下面的例子:
import numpy as np
class Vector:
def __init__(self, x, y, z):
self._vector = np.array([x, y, z])
self._magnitude = np.linalg.norm(self._vector)
self._direction = self._vector/self._magnitude
@property
def magnitude(self) -> float:
return self._magnitude
@property
def direction(self) -> np.ndarray:
return self._direction
vec = Vector(10, 4, 2)
print(vec) # <__main__.Vector object at 0x0000027BECAAFEE0>
print(vec.magnitude) # 10.954451150103322
print(vec.direction) # [0.91287093 0.36514837 0.18257419]
当我尝试print(vec)
时,它返回分配的内存地址,而不是数组which should be [10, 4, 2]
的值。
注意:我不想使用__repr__
,因为那样的话我会得到一个字符串,而我需要返回实际的类型。上面的只是一个小例子。
2条答案
按热度按时间iyr7buue1#
如果希望在将类发送给
print
函数时打印特定内容,则需要重载__str__
或__repr__
函数:因为
print
只接收发送给它的字符串表示并将其打印到屏幕上,所以需要使用其中的一个函数,如果您正在寻找一个函数,它将self._vector
作为一个对象返回,然后您可以打印它,那么您应该编写一个函数来完成此操作:阅读了评论之后,似乎你真正想要的是算术修改
self._vector
的能力,你可以通过重载__add__
,__sub__
,__mul__
,__div__
来实现:实施这些将允许您执行以下操作:
hgtggwj02#
既然你不想使用
__repr__
,你可以使用getter属性来返回值,就像你使用property来返回大小和方向一样。您的代码应如下所示