美文网首页
python------new方法及其他

python------new方法及其他

作者: 你想Ta吗 | 来源:发表于2018-08-19 19:19 被阅读0次
    • 一、单例模式
    • new与init的区别:
    • __new:创建实例对象时调用的构造方法
    • init:初始化方法,用于设置实例的相关属性
    • python创建实例时,会先调用new构造方法,然后使用init进行实例初始化。
    • 我们可以通过new来影响实例的创建,从而实现单例。
    class A(object):
        __instance = None
        def __new__(cls,*args,**kwargs):
            if not cls. __instance:
                cls.__instance = super().__new__(cls,*args,**kwargs)
            return cls.__instance
    
    a = A()
    b = A()
    print(a == b)
    print(id(a) == id(b))
    
    

    上面代码中,声明了一个私有类变量__instance,当__instance不为None时,代表系统中已有实例,直接返回该实例,若__instance为None时,表示系统中还没有该类实例,则创建新实例并返回。

    二、私有化

    xx :公开属性

    class Test(object):
        def __init__(self):
            #这是一个公开属性
            self.num = 100
    
    from a import *
    test = Test()
    print(test.num)
    

    _xx :模块内可以访问的属性这个的作用是该属性只能在当前模块中使用,出了模块及不能使用

    class Test(object):
        def __init__(self):
            #这是一个模块属性
            self._num = 100
    
    test = Test()
    print(test._num)
    

    __xx :通常是类的私有属性

    class Test(object):
        def __init__(self):
            #这是一个私有属性
            self.__num = 100
    #当前模块中Test类可以访问
    
    • 三、==和is
    >>> a = 1
    >>> b = 1.0
    >>> a is b
    False
    >>> a == b
    True
    >>> id(a)
    12777000
    >>> id(b)
    14986000
    >>> a = 1
    >>> b = 1
    >>> a is b
    True
    >>> a == b
    True
    >>> id(a)
    12777000
    >>>id(b)
    12777000
    
    
    • 四、深拷贝和浅拷贝
      浅拷贝
      浅拷贝是对于一个对象的顶层拷贝
      通俗的理解是:拷贝了引用,并没有拷贝内容
    In [10]: a = [11,22,33]
    
    In [11]: b = a
    
    In [12]: id(a)
    Out[12]: 140343572333832
    
    In [13]: id(b)
    Out[13]: 140343572333832
    
    In [14]: a[0] = 'aa'
    
    In [15]: a
    Out[15]: ['aa', 22, 33]
    
    In [16]: b
    Out[16]: ['aa', 22, 33]
    
    

    当b = a时,实际上是将a列表的内存地址赋值给了b,那么变量a与变量b指向的是同一内存地址!

    深拷贝
    深拷贝是对于一个对象所有层次的拷贝(递归)

    In [17]: import copy
    
    In [18]: c = copy.deepcopy(a)
    
    In [19]: id(a)
    Out[19]: 140343572333832
    
    In [20]: id(c)
    Out[20]: 140343572336840
    
    In [21]: a
    Out[21]: ['aa', 22, 33]
    
    In [22]: c
    Out[22]: ['aa', 22, 33]
    
    In [23]: a[0] = 11
    
    In [24]: a
    Out[24]: [11, 22, 33]
    
    In [25]: c
    Out[25]: ['aa', 22, 33]
    
    
    • 深拷贝不仅拷贝引用还拷贝值,所以内存地址不一样!

    相关文章

      网友评论

          本文标题:python------new方法及其他

          本文链接:https://www.haomeiwen.com/subject/mzthiftx.html