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

Alo*_*kur 12 python oop class python-2.7 python-3.x

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

class Sample(object):  pass
s = Sample()
print s
<__main__.Sample object at 0x026277D0>
print Sample
<class '__main__.Sample'>
Run Code Online (Sandbox Code Playgroud)

我们可以改变结果print s:

class Sample(object):
  def __str__(self):
    return "Instance of Sample"
s = Sample()
print s
Instance of Sample
Run Code Online (Sandbox Code Playgroud)

我们可以改变结果print Sample吗?

Mik*_*ler 10

您可以使用元类:

class SampleMeta(type):
    def __str__(cls):
        return ' I am a Sample class.'
Run Code Online (Sandbox Code Playgroud)

Python 3:

class Sample(metaclass=SampleMeta):
    pass
Run Code Online (Sandbox Code Playgroud)

Python 2:

class Sample(object):
    __metaclass__ = SampleMeta
Run Code Online (Sandbox Code Playgroud)

输出:

I am a Sample class.
Run Code Online (Sandbox Code Playgroud)

元类是类的类.它与类的关系类似于实例的类.使用相同的class陈述.继承表单type而不是object使其成为元类.按照惯例self取而代之的是cls.