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

Rom*_*her 5 python oop metaprogramming

有什么方法来添加一个简单的实现方式为__str__,__eq__,__repr__一类?

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

unu*_*tbu 11

你可以定义一个Defaultmixin:

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
Run Code Online (Sandbox Code Playgroud)