2011-10-29 23 views
5

Có cách nào để thêm triển khai đơn giản cho __str__, __eq__, __repr__ vào lớp không?Triển khai phương pháp mặc định trong python (__ str __, __ eq __, __ repr __, ect.)

Về cơ bản, tôi muốn một số __eq__ chỉ là liệu tất cả các biến mẫu không có tiền tố có bằng nhau không.
Và một __str__/__repr__ chỉ cần đặt tên cho mỗi biến và gọi str/repr trên mỗi biến.
Có cơ chế cho việc này trong thư viện chuẩn không?

Trả lời

10

Bạn có thể định nghĩa một mixin 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 
Các vấn đề liên quan