python基础-单例模式、__new__方法、利用new构造对象

来源:互联网 发布:sql数据库设计 编辑:程序博客网 时间:2024/06/05 05:54

        • _new_构造对象
        • newinit执行顺序
        • newclassmethod结合使用
        • newstaticmethod结合使用
        • 单例模式

_new_构造对象

# # class Person:# #     def __init__(self):# #        pass# ## #     def __new__(cls, *args, **kwargs):# #         return object.__new__(Person,*args,**kwargs)# ## # p = Person()##class Person:    def __new__(cls, *args, **kwargs):        print(cls,args,kwargs)        return object.__new__(Person,*args, **kwargs)print("------通过new初始化对象-----")person = Person.__new__(Person)#如下方式不行TypeError: object() takes no parameters# person = Person.__new__(Person,1)#设置对象属性setattr(person,"name","safly")print(person.name)print("-通过new初始化对象")person =Person.__new__("safly")setattr(person,"name","safly")print(person.name)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py------通过new初始化对象-----<class '__main__.Person'> () {}safly-通过new初始化对象safly () {}saflyProcess finished with exit code 0

new、init执行顺序

class Person:    def __init__(self,name,a):        print("init",self)        self.name = name        self.a = a    def __new__(cls, *args, **kwargs):        print("new",cls,args,kwargs)        return object.__new__(Person)person = Person("safly",a=8)print(person.name,person.a)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.pynew <class '__main__.Person'> ('safly',) {'a': 8}init <__main__.Person object at 0x02A815F0>safly 8Process finished with exit code 0

new、classmethod结合使用

class Person:    @classmethod    def createObj(cls):        obj = cls.__new__(cls)        obj.name = "safly"        return objobj = Person.createObj()print(obj.name)

输出如下:

safly

new、staticmethod结合使用

class Person:    @staticmethod    def createObj(cls):        obj = cls.__new__(cls)        obj.name = "safly"        return objobj = Person.createObj(Person)print(obj.name)

输出如下:

safly

单例模式

class Singleton:    def __new__(cls, *args, **kw):        if not hasattr(cls, '_instance'):            cls._instance = object.__new__(cls, *args, **kw)        return cls._instanceone = Singleton()one.a = 4print(one.a)two = Singleton()two.a = 3print(two.a)print(one.a)print(id(one))# 29097904print(id(two))

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/demo.py4334993905649939056Process finished with exit code 0
阅读全文
0 0
原创粉丝点击