[英]How to make a class return a value?
考慮以下示例:
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)
它返回分配的 memory 地址而不是數組的值, which should be [10, 4, 2]
。
注意:我不想使用__repr__
因為那樣我會得到一個字符串並且我需要返回實際類型。 上面的只是一個小例子。
如果您希望在將 class 發送到print
function 時打印特定內容,則需要重載__str__
或__repr__
函數:
def __str__(self):
return str(self._vector)
def __repr__(self):
return str(self._vector)
您需要使用其中之一,因為print
只是獲取發送給它的任何內容的字符串表示並將其打印到屏幕上。 如果你正在尋找一個 function 返回self._vector
作為一個 object 然后你可以打印,那么你應該寫一個 function 來做到這一點:
@property
def value(self):
return tuple(self._vector)
您可以使用 getter 屬性返回值,因為您不想使用__repr__
。 與您使用屬性返回大小和方向的方式相同。
你的代碼應該是這樣的
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 vector(self) -> np.ndarray:
return self._vector
@property
def magnitude(self) -> float:
return self._magnitude
@property
def direction(self) -> np.ndarray:
return self._direction
vec = Vector(10, 4, 2)
print(vec.vector) # [10 4 2]
print(vec.magnitude) # 10.954451150103322
print(vec.direction) # [0.91287093 0.36514837 0.18257419]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.