美文网首页
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方法及其他

    一、单例模式new与init的区别:__new:创建实例对象时调用的构造方法init:初始化方法,用于设置实例的相...

  • 其他及暗号

    风掀起四十一度热浪 柏油路软陷跋涉的影子 蚂蚁停止了搬家 蜗牛在房间里冥想远方 烟火的世界由日子组成 我用盐粒清洗...

  • 关于collectionView获取所有cell

    使用visibleCells获取, 使用其他方法都会有重用问题如果需要排序则使用第二行及以下的方法 以下是获取所有...

  • Tasker 通过发送广播 Intent 向 Autojs 传递

    注:此方法适用于 Autojs 4.0.3 Alpha4 及以上版本,其他版本可通过该方法实现 前言 如果曾看过这...

  • 关于Category关联属性

    关联属性的相关方法及优缺点 方法1 在分类中定义全局参数接收。 通过赋值打印,可以得出理想结果。但是,如果其他对象...

  • 开发小记

    GlideApp的使用,及拓展方法目前项目中进行头像加载的方式为: 加载圆角图片的方式为: 如果需要拓展其他的方法...

  • 其他优化及实践

    Android性能优化系列——Understanding Overdraw Android系统提供了测量Overd...

  • 如何阅读一本书(八)

    三、与作者找出共通的词义(二) 专门用语及特殊字汇 是否有其他方法能找出重要的字眼? 是否有更积极的方法 能找出这...

  • 如何修改Jupyter Notebook的默认路径

    本文基于Windows 10系统,其他版本及类型的操作系统未测试过,不过设置方法可能类似。 安装Anaconda以...

  • Jupyter-如何修改Jupyter Notebook的默认路

    本文基于Windows 10系统,其他版本及类型的操作系统未测试过,不过设置方法可能类似。 安装Anaconda以...

网友评论

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

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