繁体   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