参考如下继承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 继承而来的方法是否能符合上面条件,想起来应该就是个大工程。
: 请问是否有更好的方式可以完成上面的需求呢?
: 谢谢。