2014-04-17 32 views
0

我想自定義的repr(x)輸出一定的家庭類的實例x。 (FWIW,這些類從long繼承。)可以通過元類修改默認的repr行爲嗎?

我已經使用元類來控制這些類的其他方面。有沒有辦法將定製的repr行爲作爲元類定義的一部分?

+0

難道他們從元類繼承第一,或' long'? – jonrsharpe

+0

「啞」問題,你試過def __ repr __(沒有空格)嗎? –

回答

3

也許你正在尋找的東西,如:

class Meta(type): 
    def __new__(cls, clsname, clsbase, clsdict): 
     newcls = super().__new__(cls, clsname, clsbase, clsdict) 
     def custom_repr(self): 
      return '{}, Custom __repr__'.format(clsname) 
     newcls.__repr__ = custom_repr 
     return newcls 

class Foo(metaclass=Meta): 
    pass 

Python的2.X:

class Meta(type): 
    def __new__(cls, clsname, clsbase, clsdict): 
     newcls = super(Meta, cls).__new__(cls, clsname, clsbase, clsdict) 
     def custom_repr(self): 
      return '{}, Custom __repr__'.format(clsname) 
     newcls.__repr__ = custom_repr 
     return newcls 

class Foo(object): 
    __metaclass__ = Meta 

例如:

>>> Foo() 
Foo, Custom __repr__ 
>>> 
相關問題