【问题标题】:Can we overload behavior of class object [duplicate]我们可以重载类对象的行为吗[重复]
【发布时间】:2016-04-29 21:50:35
【问题描述】:

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

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的结果吗?

【问题讨论】:

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


    【解决方案1】:

    您可以使用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.
    

    元类是类的类。它与类的关系类似于类与实例的关系。使用相同的classstatement。继承表单 type 而不是从 object 使其成为元类。按照惯例,selfcls 替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2019-12-14
      相关资源
      最近更新 更多