簡體   English   中英

Python OOP如何返回對象

[英]Python OOP how to return an object

我嘗試用Python學習OOP。 下面的代碼使您對我正在做的事情有了更好的了解。 我想返回一個對象,該對象使我可以對該數據調用其他方法。 這是正確的方法嗎?

content = HTTP().GET(resource="photo/2/")
content.get_image()

class HTTP(object):

    def __init__(self):
        """
        Creates a new instance of the class and assigns local variables.
        """
        self._resource = None
        self._payload = None
        self._response = None


    @property
    def resource(self):
        return self._resource

    @resource.setter
    def resource(self, value):
        self._resource = "http://api.test.com/" % value


    @property
    def payload(self):
        return self._payload

    @payload.setter
    def payload(self, value):
        self._payload = value


    @property
    def response(self):
        return self._response

    @response.setter
    def response(self, value):
        self._response = value


    def GET(self, resource):
        """
        Sends a GET request. Returns :class:`Response` object.
        :param resource: URL for the new :class:`Request` object.
        """
        self.resource = resource
        self.response = requests.get(self.resource).json()
        return self


    def get_image(self):
        """
        Gets raw image from response.
        :return: image
        """
        return requests.get(self.response["raw"])

稍后我可能想擴展它並做

content = HTTP().POST(resource="photo/2/", payload='{"somekye":"somevalue"}')

甚至:

content = HTTP().GET(resource="photo/2/")
content.POST(payload='{"somekye":"somevalue"}')

您不必這樣做。 您可以只修改“ resource”字段,然后僅對HTTP對象的實例進行操作。 像這樣:

content = HTTP()
content.resource(valueToSet)
content.response(valueToSet)

就是這樣。

如果您希望能夠讀取修改屬性,則通常不需要getter和setter方法。

使用屬性的一個很好的理由是,例如,如果您需要檢查傳入的值並可能引發異常。

但是在那種情況下,我建議您使用一種方法,這樣對於用戶來說您正在執行某些代碼是顯而易見的。 因為您不希望修改屬性時發生異常。

如果要防止修改屬性,則應使用metaclass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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