Python设计模式之单例模式实例

2019-10-06 16:48:56丽君

    def __new__(cls, *args, **kwargs):
        print 'hi, i am Fo'
        return  super(Fo, cls).__new__(cls, *args, **kwargs)

class Foo(Fo):
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            print Foo is cls
            print issubclass(cls, Fo)
            print issubclass(cls, object)
            cls.__instance = super(Foo, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

    def hi(self):
        print 'hi, world'

if __name__ == '__main__':
    foo1 = Foo()
    foo1.hi()
    print isinstance(foo1, Foo)
    print isinstance(foo1, Fo)
    print isinstance(foo1, object)
运行结果如下:

True
True
True
hi, i am Fo
hi, world
True
True
True
如果如下定义Fo,也正常运行:

class Fo(object):
    pass
但是,若这样定义:

class Fo(object):
    def __new__(cls, *args, **kwargs):
        print 'hi, i am Fo'
运行时报错如下:

AttributeError: 'NoneType' object has no attribute 'hi'