Re: [問題] 實踐功能限定的str

看板Python作者 (poototo)時間1年前 (2023/01/13 01:44), 1年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
參考如下繼承str,其他再自己依需求補了 ================================================ class MYSTR(str): maxL = 30 def __new__(cls, s: str | int | float): return str.__new__(cls, str(s)[:cls.maxL]) def __lt__(self, s2): return self.lower() < s2.lower() def __gt__(self, s2): return self.lower() > s2.lower() def __eq__(self, s2): return self.lower() == s2.lower() def __ne__(self, s2): return self.lower() != s2.lower() # a, B, b = MYSTR("a"), MYSTR("B"), MYSTR("b") # print 底下看看 b > a, B < a, "b" > a, "B" < a, B == b, B != b, B == 'b', a == "A", "3" < MYSTR(2), "1" < MYSTR(10) ※ 引述《icetofux ()》之銘言: : 如果我需要一種特殊的str,所支援的操作及方法都和內建型態的str 相同,但是: : 1.比較時不分大小寫 : 2.字串長度不可大於30個字元 : 3.能與內建型態的str 進行比較(==)、連接(+)等操作 : 目前直覺想到的作法是繼承str ,在__eq__裡將比較對象跟本身都轉為小寫再進行比較,以及__init__跟__add__裡檢查字串長度,若大於30個字元就拋出例外。因為我沒辦法預測使用者會呼叫其他哪些方法,所以也得一一檢查所有從str 繼承而來的方法是否能符合上面條件,想起來應該就是個大工程。 : 請問是否有更好的方式可以完成上面的需求呢? : 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.12.28 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1673545440.A.7CA.html ※ 編輯: poototo (123.193.12.28 臺灣), 01/13/2023 02:22:35
文章代碼(AID): #1Zm4RWVA (Python)
文章代碼(AID): #1Zm4RWVA (Python)