Python OOP 如何返回一个对象
我正在尝试学习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)
就这样。