产生的对象的方式__new__与单例模式

1.产生对象的原理      __new__ 方法

class testclass:
    #类内部在new一个对象之前默认生成一个空的对象(内存空间),然后再调用__init__
    def __new__(cls, *args, **kwargs):   # 声明:python __new__ 为类中的静态方法
        return object.__new__(cls)   #通过object的new方法把本类作为参数去创建一个空对象
    def __init__(self,name):

        self.name = name

obj = testclass('egon')
print(obj.name)    #  egon

2. 基于__new__的单例模式

#  基于__new__的单例模式
class sington:
    _instance = None
    def __new__(cls, *args, **kwargs):   # Python的实现机制 __new__ 为类中的静态方法
        if not cls._instance:            # 静态方方法
            cls._instance = object.__new__(cls)
            return  cls._instance

obj1 = sington()
obj2 = sington()
# print(sington)   # <class '__main__.sington'>
# print(sington.__class__)  #<class 'type'>
# print(sington)   # <class '__main__.sington'>
print(sington.__dict__)  # 打印类的名称空间

print(obj1.__dict__)   # 打印对象的名称空间
print(obj1.__class__)  # 打印对象的类
print(obj1.__class__.__name__)  # 打印对象的类名
posted @ 2019-12-11 17:00  躺云飘  阅读(340)  评论(0编辑  收藏  举报