Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决;类“的未解析属性引用”;_Python_Python 3.x_Class Attributes - Fatal编程技术网

Python 如何解决;类“的未解析属性引用”;

Python 如何解决;类“的未解析属性引用”;,python,python-3.x,class-attributes,Python,Python 3.x,Class Attributes,我一直在从事一个小项目,这是一个网络爬虫模板。我在pycharm中遇到了一个问题,我得到了一个警告,类“Scraper”的未解析属性引用“domain” from abc import abstractmethod import requests import tldextract class Scraper: scrapers = {} def __init_subclass__(scraper_class): Scraper.scrapers[scra

我一直在从事一个小项目,这是一个网络爬虫模板。我在pycharm中遇到了一个问题,我得到了一个警告,类“Scraper”的未解析属性引用“domain”

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)
来自abc导入抽象方法的

导入请求
进口tldextract
类别刮刀:
刮刀={}
定义初始子类(刮刀类):
Scraper.scrapers[Scraper_class.domain]=Scraper_class#类“Scraper”的未解析属性引用“domain”
@类方法
url(cls,url)的定义:
k=tldextract.extract(url)

#返回->&Scraped BBC News只需告诉yrou
Scraper
class这个属性存在

类刮刀:
刮刀={}
域名:str
定义初始子类(刮刀类):
Scraper.scrapers[Scraper\u class.domain]=Scraper\u类

只要告诉YRU
Scraper
类这个属性存在

类刮刀:
刮刀={}
域名:str
定义初始子类(刮刀类):
Scraper.scrapers[Scraper\u class.domain]=Scraper\u类

关于如何删除此警告,有几个不同的级别:

  • 指定默认值:
  • 您可以附加或交替地对类型进行注释

请注意,
ClassVar
是必需的,因为否则将假定它们是实例属性。

关于如何删除此警告,有几个不同的级别:

  • 指定默认值:
  • 您可以附加或交替地对类型进行注释

请注意,
ClassVar
是必需的,因为否则将假定它们是实例属性。

注意这里和其他:您可能会考虑奖励最有用的属性answer@azro很抱歉我没有像我想的那样接受答案,我是那个给出+1答案的人,哈哈!刚刚接受❤️注意:你可以考虑奖励最有用的人answer@azro很抱歉我没有像我想的那样接受答案,我是那个给出+1答案的人,哈哈!刚刚接受❤️老实说,这是一个糟糕的答案:拼写错误,没有充分解释问题,没有正确使用类型提示。老实说,这是一个糟糕的答案:拼写错误,没有充分解释问题,没有正确使用类型提示。哦,基本上是“修复”是在init子类之前声明属性吗?使用
scrapers:ClassVar[dict[str,Scraper]]={}
>>>
未解析引用“Scraper”
@gragornewbie抱歉。您需要为
从uuu未来导入注释
或将
刮板
放入字符串(如我编辑了答案)是否有理由使用其中一个而不是另一个?只是curious@ProtractorNewbiePython3.11不是喷气式飞机。下一个版本(3.10)将在几个月后发布<“来自未来”的“代码>导入注释”
是一种神奇的导入,可防止类型注释(例如,
之后的大多数内容)不被评估。这意味着你可以“引用”一些东西,即使它当时并不存在。这里有一个更完整的解释:哦,那么基本上“修复”是在init子类之前声明属性?我在使用
scrapers:ClassVar[dict[str,Scraper]]={}
>>>
未解析的引用“Scraper”
@progratornewbie抱歉。您需要为
从uuu未来导入注释
或将
刮板
放入字符串(如我编辑了答案)是否有理由使用其中一个而不是另一个?只是curious@ProtractorNewbiePython3.11不是喷气式飞机。下一个版本(3.10)将在几个月后发布<“来自未来”的“代码>导入注释”是一种神奇的导入,可防止类型注释(例如,
之后的大多数内容)不被评估。这意味着你可以“引用”一些东西,即使它当时并不存在。下面是一个更完整的解释:
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]