我们可以重载类对象的行为

时间:2016-01-23 08:18:42

标签: python python-2.7 class oop python-3.x

我知道我们可以重载类实例的行为,例如 -

class Sample(object):  pass
s = Sample()
print s
<__main__.Sample object at 0x026277D0>
print Sample
<class '__main__.Sample'>

我们可以更改print s的结果:

class Sample(object):
  def __str__(self):
    return "Instance of Sample"
s = Sample()
print s
Instance of Sample

我们可以更改print Sample的结果吗?

1 个答案:

答案 0 :(得分:8)

您可以使用metaclass

class SampleMeta(type):
    def __str__(cls):
        return ' I am a Sample class.'

Python 3:

class Sample(metaclass=SampleMeta):
    pass

Python 2:

class Sample(object):
    __metaclass__ = SampleMeta

输出:

I am a Sample class.

元类是类的类。它与类的关系类似于实例的类。使用相同的class语句。从type继承表单object使其成为元类。按照惯例,self替换为cls