Python 如何选择正确的类(NameError)
我一直在做一个项目,我想收集URL,然后我可以导入所有带有scraper类的模块,它应该将所有模块注册到列表中 我目前做了:Python 如何选择正确的类(NameError),python,python-3.x,class-variables,Python,Python 3.x,Class Variables,我一直在做一个项目,我想收集URL,然后我可以导入所有带有scraper类的模块,它应该将所有模块注册到列表中 我目前做了: import sys import tldextract class Scraper: scrapers = {} def __init_subclass__(scraper_class): Scraper.scrapers[scraper_class.url] = scraper_class # .url -> Unresol
import sys
import tldextract
class Scraper:
scrapers = {}
def __init_subclass__(scraper_class):
Scraper.scrapers[scraper_class.url] = scraper_class # .url -> Unresolved attribute reference 'url' for class 'Scraper'
@classmethod
def for_url(cls, url):
k = tldextract.extract(url)
return scrapers[k.domain]() #<-- Unresolved reference 'scrapers'
class BBCScraper(Scraper):
url = 'bbc.co.uk'
def scrape(s):
print(s)
# FIXME Scrape the correct values for BBC
return "Yay works!"
url = 'https://www.bbc.co.uk/'
scraper = Scraper.for_url(url)
scraper.scrape("yay")
我想知道如何选择正确的类,例如,如果URL是bbc,它应该进入BBCScraper类,然后我们调用scrape,它稍后将返回在特定网站上被刮取的值,就像您在
\uu init\u子类中所做的那样,或者使用cls.scrapers
@classmethod
def for_url(cls, url):
k = tldextract.extract(url)
return Scraper.scrapers[k.domain]()
# or
return cls.scrapers[k.domain]()
至于第二个问题
请在另一个问题中问这个问题
请更好地解释你到底想做什么
我将创建一个关于第二个问题的新问题。我认为它可能不适合这里。使用cls.scraper和scraper.scraper有什么区别?:)-当继承开始发挥作用时,其行为会有所不同。这可能会影响您,具体取决于第二个问题。我认为对于这个特定的用例,这并不重要。
@classmethod
def for_url(cls, url):
k = tldextract.extract(url)
return Scraper.scrapers[k.domain]()
# or
return cls.scrapers[k.domain]()