python中的默认方法实现(__ str __,__ eq __,__ repr __等)

时间:2011-10-29 09:18:50

标签: python oop metaprogramming

有没有办法为类__str____eq____repr__添加简单的实现?

基本上我希望__eq__只是所有非前缀实例变量是否相等 还有一个__str__ / __repr__,只为每个变量命名并在每个变量上调用str / repr 标准库中是否有这样的机制?

1 个答案:

答案 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