有没有办法为类__str__
,__eq__
,__repr__
添加简单的实现?
基本上我希望__eq__
只是所有非前缀实例变量是否相等
还有一个__str__
/ __repr__
,只为每个变量命名并在每个变量上调用str / repr
标准库中是否有这样的机制?
答案 0 :(得分:11)
您可以定义Default
mixin:
class Default(object):
def __repr__(self):
return '-'.join(
str(getattr(self,key)) for key in self.__dict__ if not key.startswith('_'))
def __eq__(self,other):
try:
return all(getattr(self,key)==getattr(other,key)
for key in self.__dict__ if not key.startswith('_'))
except AttributeError:
return False
class Foo(Default):
def __init__(self):
self.bar=1
self.baz='hi'
foo=Foo()
print(foo)
# hi-1
foo2=Foo()
print(foo==foo2)
# True
foo2.bar=100
print(foo==foo2)
# False