Python基础——类new方法与单例模式
介绍:
new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了。new方法的第一个参数cls是类本身的含义(即你要实例化的类),与self不同,self是实例化本身,两者还是有很大的区别的。
在定义新式类时没有重新定义new()时 ,Python默认是调用该类的直接父类的new()方法来构造该类的实例,如果该类的父类也没有重写 new(),那么将一直按此规矩追溯至object的new()方法,因为object是所有新式类的基类。 如果自己重写new方法,记住千万不能返回调用自身的new方法,因为这样会造成死循环。
单利化模式
单利化模式的意思是一个类只能被实例化一次,即使实例化多次,利用id()函数可以发现他们的id都是一样的,即内存地址相同,后者实例的会将前面实例化的对象给覆盖掉,这个模式的好处是可以节省内存。代码如下:
class Rectangle:
def __new__(cls,*args,**kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super().__new__(cls)#super()方法是调用其父类,即object
return cls._instance
else:
return cls._instance
def __init__(self,Length,Width):
self.Length = Length
self.Width = Width
print (self.Width)
def A(self):
print (self.Length)
a = Rectangle(4,6)
b = Rectangle(5,7)
print (a,b)
6
7
<__main__.Rectangle object at 0x00000145F8E22390> <__main__.Rectangle object at 0x00000145F8E22390>
上述代码可以发现,在第一次实例化时,我们会用一个私有属性_instance去接收父类new方法开辟的内存,并返回。当我们第二次实例化时,由于私有属性_instance存在,故直接返回它。可以发现的是,两次实例化中,new方法所返回的内存空间是同一个,故最后得到的实例化当然就是一样的内存地址了,b的初始化带来的属性会覆盖掉a的属性。
Python基础——类new方法与单例模式的更多相关文章
- python基础--类的方法
一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方 ...
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- Python基础-类
Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- python基础——类定义(转)
一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性.如果直接使用类名修改其属性,那么将直接影响到已经实例 ...
- Python菜鸟之路:Python基础-类(1)——概念
什么是类? 在python中,把具有相同属性和方法的对象归为一个类(class).类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化.类不代表具体的事物,而对象表示具体的事物. 类的创建 cla ...
- Python基础——类
创建类 class people: '帮助信息:dsafdaf' #所有实例都会共享的 number=100 #构造函数,初始化的方法,当创建一个类的时候,首先会调用它 def __init__(se ...
- 【原】Python基础-类
class CPerson: name = "default" __name2 = "inaccessable name" #类作用域内的变量可以被所有实例访问 ...
- Python 入门之Python基础数据类型及其方法
Python 入门之Python基础数据类型 1. 整型:int 用于计算,用于比较 (在赋值的时候先执行等号右边的内容) 1.1 整数的加 a = 10 b = 20 print(a + b) 结果 ...
随机推荐
- UVALive 4731 dp+贪心
这个题首先要利用题目的特性,先贪心,否则无法进行DP 因为求期望的话,越后面的乘的越大,所以为了得到最小值,应该把概率值降序排序,把大的数跟小的系数相乘 然后这种dp的特性就是转移的时候,由 i推到i ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型
C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed unsigned lo ...
- Jlink线序问题
- HTTP协议(二):作用
前言 上一节我们简单介绍了一下TCP/IP协议族的基本情况,知道了四大层的职责,也了解到我们这一族的家族成员以及他们的能力. 无良作者把我这个主角变成了配角,让我很不爽,好在我打了作者一顿,没错,这次 ...
- 18 11 26 用多进程 多线程 携程 实现 http 服务器的创建
下面是一个 多进程 服务器的创建 import socket import re import multiprocessing def service_client(new_socket): &qu ...
- .NET CORE 获取微信支付回调
1.获取微信支付的回调的数据 Stream stream = HttpContext.Request.Body; byte[] buffer = new byte[HttpContext.Reques ...
- mysql5.7.21源码安装
1.下载安装包 MySQL 官方下载地址:https://dev.mysql.com/downloads/mysql/ MySQL 5.7官方安装文档:https://dev.mysql.com/d ...
- PAT Advanced 1099 Build A Binary Search Tree (30) [⼆叉查找树BST]
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- TX2Ubuntu16.04上安装 kinectV2
本文参考 https://www.ncnynl.com/archives/201706/1780.html 参考 https://blog.csdn.net/qq_33835307/arti ...
- Java--二维码生成&图片和流转化
package test; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java. ...