【发布时间】: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__?你打算在这里做什么?