可以通过元类修改默认的repr行为吗?

时间:2014-04-17 16:40:14

标签: python

我想为某个类别的实例repr(x)自定义x的输出。 (FWIW,这些类继承自long。)

我已经使用元类来控制这些类的其他方面。有没有办法可以将自定义repr行为作为元类定义的一部分包含在内?

1 个答案:

答案 0 :(得分: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__
>>>