如何解决Python 3类型比较
因此,我尝试覆盖自定义类的 eq 运算符,但是这样做是要检查两个对象是否具有相同的类型,以便可以比较其中的属性
MyScript.py
class myClass:
def __init__(val):
self.myVar = val
def __eq__(self,other):
assert type(other) is type(self)
return self.myVar == other.myVar
MyFunc.py
from MyScript import *
def myFunc(val):
return myClass(val)
以上两个都在MyPackage软件包中
我的主像与此相似 main.py
from MyPackage import *
if __name__ == "__main__":
a = myClass(1)
b = myFunc(1)
print(a == b)
但是我收到一个断言错误,说这两个对象属于不同的类
type(a) == "<MyPackage.myClass>"
type(b) == "<myClass>"
我并没有写完所有代码,但是Python 3缺少我一些东西,当它们在不同位置创建时,它们阻止了类的相同吗?
解决方法
该问题似乎是由错误的导入引起的。但是还有另一种值得检查的实例检查方法。您的解决方案不适用于myClass
的继承者。相反,您可以这样做
class myClass:
def __init__(val):
self.myVar = val
def __eq__(self,other):
if isinstance(other,myClass):
return self.myVar == other.myVar
else:
raise TypeError(f"'==' not supported between instances of '{self.__class__.__name__}' and '{other.__class__.__name__}'")
这将适用于myClass
的子类,并引发更典型的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。