You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AttributeError: 'Pages'对象没有属性'pages'的报错

问题分析与解决

错误原因

Python中类的实例化流程是:先调用__new__创建类实例,再调用__init__对实例进行初始化(添加属性、赋值等)。你在__new__中创建实例后直接访问instance.pages,但此时__init__还未执行,pages属性根本没有被定义,因此抛出AttributeError。

修复方案

如果你希望调用Pages('123', [1, 2, 3, 4])直接返回pages列表,不需要保留Pages实例,可以直接在__new__中生成目标列表并返回,跳过__init__的执行(当__new__返回的不是当前类的实例时,Python不会调用__init__)。

修改后的完整代码如下:

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]):
        # 直接调用静态方法生成pages列表并返回
        return cls.create_pages(range_of_pages, 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

补充说明

如果你需要保留Pages实例的功能(比如原有的__getitem__方法),同时希望能获取pages列表,建议不要让构造器直接返回列表,而是通过实例属性访问:

class 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_instance = Pages('123', [1, 2, 3, 4])
pages_list = pages_instance.pages

内容的提问来源于stack exchange,提问作者prismo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:30:21