我知道我们可以重载类实例的行为,例如 -
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
的结果吗?
答案 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
。