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