关于python的元类,我在网上找了一下,有很多内容,现在我想把它们整理一下。

就想对象是类的实例一样,类是元类的一个实例。这一点就可以解释之前我一直看不懂的一段代码。
class Singleton(type):
    """Singleton Metaclass"""
    def __init__(cls, name, bases, dic):
        super(Singleton, cls).__init__(name, bases, dic)
        cls.instance = None
    def __call__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
        return cls.instance
class MyClass(object):
    __metaclass__ = Singleton
a = MyClass()
b = MyClass()

class Singleton(type):
"""Singleton Metaclass"""
def __init__(cls, name, bases, dic):
super(Singleton, cls).__init__(name, bases, dic)
cls.instance
= None
def __call__(cls,
*args, **kwargs):
if cls.instance is None:
cls.instance
= super(Singleton, cls).__call__(*args, **kwargs)
return cls.instance
class MyClass(object):
__metaclass__
= Singleton
a
= MyClass()
b
= MyClass()

 

     这段代码在别人博客上复制过来的,之前不是很懂,现在我解释一下,免得以后忘记。首先,来看看__call__:
python 给类提供了名为__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下,__call__()方法是没有实现的,这意味着大多数实例都不可调用的。然而,如果在类定义中覆盖了这个方法,那么这个类的实例就成为可调用的了。调用这样的实例对象等同于调用__call__()方法。简单的说如果类里覆盖了__call__方法,a=A(),那么a()就会去执行__call__方法。
      呵呵,确实有点意思。