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