Python中的默认方法实现(__str__,__eq__,__repr__等)

6
有没有办法为一个类添加简单的实现__str____eq____repr__?基本上,我希望__eq__只是判断所有非前缀实例变量是否相等。而__str__/__repr__只需命名每个变量并对每个变量调用str/repr函数。标准库中有这样的机制吗?
1个回答

12

你可以定义一个 Default 混合器:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接