【问题标题】:How do I resolve AttributeError: "Pages" object has no attribute "pages"如何解决 AttributeError:\"Pages\" 对象没有属性 \"pages\"
【发布时间】:2023-01-23 02:21:10
【问题描述】:

我有一些自定义类,如下所示:

from typing import List
from typing_extensions import Self

class Page:
    def __init__(self, search_id: str, page_num: int) -> None:
        self.search_id = search_id
        self.page_num = page_num
        self.isLast = False

    def mark_as_last(self):
        self.isLast = True
class Pages:
    def __new__(cls: Self, search_id: str, range_of_pages: List[int]):
        instance = super(Pages, cls).__new__(cls)
        return instance.pages

    def __init__(self, search_id: str, range_of_pages: List[int]):
        self.search_id = search_id
        self.ranges_of_pages = range_of_pages
        self.pages = Pages.create_pages(self.ranges_of_pages, self.search_id)

    @staticmethod
    def create_pages(range_of_pages: List[int], search_id: str) -> List[Page]:
        pages = []
        for page_num in range_of_pages:
            page = Page(search_id, page_num)
            if page_num == range_of_pages[-1]:
                page.mark_as_last()
            pages.append(page)
        return pages

    def __getitem__(self, item):
        return self.pages[item]

当像Pages('123', [1, 2, 3, 4]) 那样调用“页面”时,我想返回一个页面列表 - 请参阅return instance.pages

好吧......当我到达这一点时,我得到了一个错误。具体这个错误:

def __new__(cls: Self, search_id: str, range_of_pages: List[int]):
        instance = super(Pages, cls).__new__(cls)
        return instance.pages
E       AttributeError: 'Pages' object has no attribute 'pages'

我错过了什么吗?这应该工作。我不知道这里出了什么问题。

【问题讨论】:

  • 为什么此时您期望 Pages 对象具有 pages 属性?
  • 你为什么要实现__new__?你打算在这里做什么?

标签: python class


【解决方案1】:

__new__ 处理类实例的创建,而 __init__ 初始化它。由于__new____init__之前运行,创建的实例还没有在__init__中分配的pages属性。

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多