我需要用来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 的截图: