Python3的__new__进行构造类的实例化
__new__方法
- 这个方法是用来生成类的实例
class Singleton(object):
def __new__(cls,*args, **kwargs): ①
if not hasattr(cls,'_inst'):
print(cls)
cls._inst = super(Singleton, cls).__new__(cls) ②
return cls._inst ②
① 第一个参数必须是"要进行实例化的类".
② 返回实例完成的结果,如果实例化失败那么实例的初始化函数"init"肯定不会执行
Python2(2.7)的写法
class Singleton(object):
def __new__(cls,*args, **kwargs): ①
if not hasattr(cls,'_inst'):
print(cls)
cls._inst = super(Singleton, cls).__new__(cls,*args,**kwargs) ②
return cls._inst ②
Python3(3.5)的写法
class Singleton(object):
def __new__(cls,*args, **kwargs): ①
if not hasattr(cls,'_inst'):
print(cls)
cls._inst = super(Singleton, cls).__new__(cls) ②
return cls._inst ②
如果Python3的写法跟Python2写法一样,那么倒数第二行会报错"TypeError: object() takes no parameters"
Python3的__new__进行构造类的实例化的更多相关文章
- __new__()方法的使用和实例化
Python中__new__()方法的使用和实例化 1 2 new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init ...
- Python中__new__()方法的使用和实例化
new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...
- 创建Car类,实例化并调用Car类计算运输的原料量是否足够
package dx; public class Car { //构造类 public Car() { System.out.println("Car的构造类"); } //构造类 ...
- python3全栈开发- 元类metaclass(面试必考题)
一.知识储备 #exec:三个参数 #参数一:字符串形式的命令 #参数二:全局作用域(字典形式),如果不指定,默认为globals() #参数三:局部作用域(字典形式),如果不指定,默认为locals ...
- Day 5-8 自定义元类控制类的实例化行为
__call__方法: 对象后面加括号,触发执行. 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类( ...
- Python3.x:定义一个类并且调用
Python3.x:定义一个类并且调用 1,定一个类Shrjj(其中有属性:name, jjzt,fbsjj,etf,lof,fjlof): class Shrjj(object): def __in ...
- Java类的定义与类的实例化
目录 Java类的定义与类的实例化 类的定义 定义一个简单的类 定义一个成员变量 定义一个方法 定义一个构造器 类的实例化 创建对象及使用对象: 创建对象的过程在内存中的表现 Java类的定义与类的实 ...
- 关于Java构造类与对象的思考
简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: P ...
- JVM初探(五):类的实例化
一.概述 我们知道,一个对象在可以被使用之前必须要被正确地实例化.而实例化实际指的就是以一个java类为模板创建对象/实例的过程.比如说常见的 Person = new Person()代码就是一个将 ...
随机推荐
- ssh基础配置大全
firstweb firstweb-pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi= ...
- Leet Palindrome Partitioning II
class Solution { public: int minCut(string s) { int len = s.length(); ]; char* s_dp = new char[len * ...
- Markdown预览功能不可用解决方案
初学者在使用Markdown时也许会遇到这个问题 原因是电脑缺少一个组件,解决方案很简单,安装上就好了,以下是链接 http://markdownpad.com/download/awesomium_ ...
- jQuery导入及测试
jQuery导入: <script type="text/javascript" src="js/jquery-3.1.1.min.js">< ...
- javaSE——File文件的操作
File文件操作: 在java中,File是文件和文件夹的总称. 在java中也是一个类,可以创建多个file对象. File类的一些API import java.io.File; public c ...
- CRM 安装过程 AD+SQL+CRM
AD: 通过服务器管理器添加域服务,配置域服务器域名为crm5.lab. 注意:使用高级模式安装. 说明:服务器是windows server 2003 那么就选windows server 2003 ...
- CSS 几款比较常用的翻转特效
第一个:360度翻转特效 <style>* { margin:0; padding:0; } .aa { width: 220px; height: 220px; margin: 0 au ...
- JSON学习笔记-3
JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...
- shell黑名单
#/bin/bash netstat -ant | " | awk '{print $5}' | grep -v "^10" | cut -d ":" ...
- mysql使用笔记(网易Mysql实用手册)---1
1帮助使用 1.1按层次查看帮助 1 当不知道帮助可提供什么时,可通过MySQL内置帮助文档,一层层往下看. 命令: mysql> ? contents ? 等效help,该文档涵盖了数据库操作 ...