簡體   English   中英

重載__getitem__以支持不同的訪問參數

[英]overloading __getitem__ to support different access arguments

我正在嘗試簡化代碼,我認為我可以重載getitem以使其既像列表又像字典。 我有理由不這樣做嗎?

class Book:
    def __init__(self):
        self.page_id = []
        self.page = []

    def __getitem__(self, ref):
        if type(ref) is int:
            return self.page[ref]
        elif type(ref) is str:
            page_index = self.page_id.index(ref)
            return self.page[page_index]

這樣我可以支持這樣的事情

book = Book()
page_1 = book[5]
page_8 = book['id_for_page_8']

通過簡單地嘗試/ except,您可能會更pythonic

class Book:
    def __init__(self):
        self.page_id = []
        self.page = []

    def __getitem__(self, ref):
        try:
            return self.page[ref]   # assume it's an int
        except TypeError:
            return self.page[self.page_id.index(ref)] # assume it's a string if not an int

作為一般提示,使用isinstance是對類型的更好選擇,因為isinstance可以理解繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM