簡體   English   中英

如何使 class 返回一個值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM