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)