从迭代器中标记对象以便以后处理的Pythonic方法

从迭代器中标记对象以便以后处理的Pythonic方法,python,inheritance,web-scraping,generator,Python,Inheritance,Web Scraping,Generator,这是一个有点奇怪的问题,但我目前正在使用python中的一个刮片设置,该设置中的方法生成了一些不同的内容之一。要刮取的URL,以及主要刮取的对象 如果生成了一个URL,那么我想采取某些步骤,例如检查有效性、添加回调等。。。为了合理地分离关注点,这些步骤不会发生在主刮取功能中。这给我留下了这样的印象: def scraper(response): # XML parsing yield URL(<your_url_here>) yield Item({"some

这是一个有点奇怪的问题,但我目前正在使用python中的一个刮片设置,该设置中的方法生成了一些不同的内容之一。要刮取的URL,以及主要刮取的对象

如果生成了一个URL,那么我想采取某些步骤,例如检查有效性、添加回调等。。。为了合理地分离关注点,这些步骤不会发生在主刮取功能中。这给我留下了这样的印象:

def scraper(response):
    # XML parsing
    yield URL(<your_url_here>)
    yield Item({"some": "dict"})

def handler(response):
    for item in scraper(response):
        if isinstance(item, URL):
            # Do something
        elif isinstance(item, Item):
            # Do something else
def刮管器(响应):
#XML解析
收益率URL()
收益项目({“部分”:“dict”})
def处理程序(响应):
对于刮板中的项目(响应):
如果是实例(项目、URL):
#做点什么
elif isinstance(项目,项目):
#做点别的
这些scraper是使用框架编写的,处理程序也可以修改。问题是URL只是一个字符串,因此创建一个自定义URL类以便在处理程序中捕获它是非常不符合Python的。这是在制作一个没有公共方法的类,我觉得这是不对的

另一个问题是,由于这些scraper可以被覆盖,因此完全可能有人出于其他原因想要生成其他字符串,因此仅检查基串成员资格似乎也很不符合语法


有没有一种更具python风格的方法来基本上“标记”这些生成的对象以进行后处理,而不制作类的外壳?

为什么不直接生成带有“url”作为键的项目?@Vincenzzochi,项目通常有一个与之相关联的url键,但我们并不总是想重新访问这些url。事实上,我们通常不这样做,所以它不能进行有效的检查。“做点什么”部分听起来像是一种公共方法<代码>用于scraper中的项(响应):item.process()。只是
每次在scraper中产生一个值元组。@chepner理想情况下是的,但在这种情况下,“do something”实际上相当重,有一些特定于上下文的依赖项。事实上,它被包装在一个更大的对象中。为什么不将“url”作为一个键放在项目中呢?@Vincenzzochi,项目通常有一个与之相关联的url键,但我们并不总是想重新访问这些url。事实上,我们通常不这样做,所以它不能进行有效的检查。“做点什么”部分听起来像是一种公共方法<代码>用于scraper中的项(响应):item.process()
。只是
每次在scraper中产生一个值元组。@chepner理想情况下是的,但在这种情况下,“do something”实际上相当重,有一些特定于上下文的依赖项。实际上,它被包裹在一个更大的物体中。