如何解决如何解决“未解析的类属性引用”
我一直在做一个小项目,它是一个网络爬虫模板。我在 pycharm 中遇到了一个问题,我收到了警告 Unresolved attribute reference 'domain' for class 'Scraper'
from abc import abstractmethod
import requests
import tldextract
class Scraper:
scrapers = {}
def __init_subclass__(scraper_class):
Scraper.scrapers[scraper_class.domain] = scraper_class # Unresolved attribute reference 'domain' for class 'Scraper'
@classmethod
def for_url(cls,url):
k = tldextract.extract(url)
# Returns -> <scraper.SydsvenskanScraper object at 0x000001E94F135850> & Scraped BBC News<!DOCTYPE html><html Which type annotiation?
return cls.scrapers[k.registered_domain](url)
@abstractmethod
def scrape(self):
pass
class BBCScraper(Scraper):
domain = 'bbc.co.uk'
def __init__(self,url):
self.url = url
def scrape(self):
rep = requests.Response = requests.get(self.url)
return "Scraped BBC News" + rep.text[:20] # ALL HTML CONTENT
class SydsvenskanScraper(Scraper):
domain = 'sydsvenskan.se'
def __init__(self,url):
self.url = url
def scrape(self):
rep = requests.Response = requests.get(self.url)
return "Scraped Sydsvenskan News" + rep.text[:20] # ALL HTML CONTENT
if __name__ == "__main__":
URLS = ['https://www.sydsvenskan.se/','https://www.bbc.co.uk/']
for urls in URLS:
get_product = Scraper.for_url(urls)
r = get_product.scrape()
print(r)
当然我可以忽略它,因为它正在工作,但我不喜欢忽略警告,因为我相信 pycharm 很聪明,应该解决警告而不是忽略它,我想知道它警告我的原因是什么?
解决方法
有几个不同的级别可以消除此警告:
- 分配一个默认值:
class Scraper:
scrapers = {}
domain = None # Or a sensible value of one exists
- 您可以添加或交替注释类型。
from typing import ClassVar
class Scraper:
scrapers: ClassVar[dict[str,'Scraper']] = {}
domain: ClassVar[str]
请注意,ClassVar
是必需的,否则将假定它们是实例属性。
告诉 yrou Scraper
class 这个属性存在
class Scraper:
scrapers = {}
domain: str
def __init_subclass__(scraper_class):
Scraper.scrapers[scraper_class.domain] = scraper_class
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。