我需要用来UserString创建自己的str类,但它的实现似乎有问题。
例如,在类定义中,它读取:
def __eq__(self, string):
if isinstance(string, UserString):
return self.data == string.data
return self.data == string
但由于一个空列表 ( []) 实际上是 的一个实例UserString:
isinstance([], UserString) == True
现在这段代码不起作用:
s = UserString("")
if s in [None, [], {}, ()]:
# do whatever
因为in运营商将使用UserString's__eq__来检查成员资格但[]没有.data属性。内置str类中不存在此问题。我知道这是一个微不足道的、不切实际的例子,但是任何人在使用之前都遇到过这个问题,UserString以及规避这个问题的最佳方法是什么(可能是我自己的子类中的方法覆盖)?还有其他注意事项吗?
注意:我知道这个SO 线程,但我不认为我的问题与它重复。
似乎没有人可以复制isinstance([], UserString) == True。但这是我的 PyCharm IDE 的截图:
