Python OOP 如何返回一个对象

0 投票
2 回答
1361 浏览
提问于 2025-04-18 16:31

我正在尝试学习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"}')

2 个回答

0

如果你想要既能读取又能修改一个属性,通常不需要使用获取器和设置器方法。

使用属性的一个好理由是,比如说你需要检查传入的值,并可能抛出一个异常。

但在这种情况下,我建议你使用一个方法,这样用户就能明显看出你在执行一些代码。因为在修改一个属性时,通常不会预期会发生异常。

如果你想要防止属性被修改,你应该使用一个元类

1

你不一定要这样做。你可以直接修改'资源'这个字段,然后就可以对你的HTTP对象进行操作了。就像这样:

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

就这样。

撰写回答