【发布时间】:2016-01-01 04:22:47
【问题描述】:
我正在创建一个抽象的网络爬虫类 Crawler。 此类只能与实现某些方法的子类一起使用。
(删除了 init 方法,因为它无关紧要)
class Crawler():
def get_image_source_url(self, image_page_soup):
return NotImplementedError("method get_image_source_url must be implemented")
def get_image_thumbnail_url(self, image_page_soup):
return NotImplementedError("method get_image_thumbnail_url must be implemented")
def get_tags_container(self, image_page_soup):
return NotImplementedError("method get_tags_container must be implemented")
它们是在子类中实现的:
class LittlevisualsCrawler(Crawler):
def get_image_containers(self, image_page_soup):
return image_page_soup.find('article', class_='photo')
def get_image_source_url(self, image_page_soup):
return image_page_soup.find('img')['src']
def get_image_thumbnail_url(self, image_page_soup):
return image_page_soup.find('img')['data-1280u']
def get_tags_container(self, image_page_soup):
return image_page_soup.find('ul', class_='tags')
我想将该函数包装在一个 try-except 块中,无论它是作为什么实现的。所以最终结果是:(伪代码)
class Crawler():
def get_image_source_url(self, image_page_soup):
if not_implemented:
return NotImplementedError("method get_image_thumbnail_url must be implemented")
else:
try:
whatever the child class chooses to do
except Exception:
handle exception however i decide in the parent class
我不知道如何检查它是否已实现以及如何在不覆盖所有内容的子类的情况下包装函数,我是否清楚我想要实现的目标?
【问题讨论】:
-
NotImplementedError是个例外;不要返回它,raise它作为一个例外。 -
(是的,还有一个
NotImplementedsingleton 对象,它在__add__等特殊方法中用作特殊返回值。这不是一个用例对象)。
标签: python oop python-3.x inheritance try-except