0

我需要用来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 的截图: 这是我的 PyCharm IDE 的屏幕截图

4

0 回答 0