__new()__与__init__()
1. __new__:创建对象时调用,会返回当前对象的一个实例。(默认情况下也就是你在类中没有没有重新这个方法,会默认返回当前类的示例,如果你重写了这个方法,但是在方法中没有返回当前类的示例,那么也就是说没有创建对象,也就不会执行init方法)
2. __init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值。(只有在__new__方法中返回当前类的示例时,才会自动执行)
3. 在类中,如果__new__和__init__同时存在,会优先调用__new__。
class NameInfo:
def __new__(cls, *args, **kwargs): # 创建对象的时候执行
print('__new__')
# return super(NameInfo, cls).__new__(cls) # 如果注释不执行,不会执行init方法,因为没有返回类的示例,在实例化类时,也不会创建出对象
def __init__(self, name, *args, **kwargs): # 初始化对象的时候执行
self.name = name
print("__init__")
@property
def get_name(self):
return self.name
@get_name.setter
def get_name(self,new_name):
self.name = new_name
if __name__ == "__main__":
alex = NameInfo('ALEy')
2. __new__()方法还可以用来实现单例模式
class NameInfo:
def __new__(cls, *args, **kwargs): # 创建对象的时候执行
if not hasattr(cls, 'instance'):
# 创建实例
cls.instance = super(NameInfo, cls).__new__(cls)
# print(cls.instance)
return cls.instance
def __init__(self, name, *args, **kwargs): # 初始化对象的时候执行
self.name = name
print("__init__")
if __name__ == "__main__":
alex = NameInfo('ALEy')
eric = NameInfo('eric')
print(id(alex))
print(id(eric))
C:\python35\python.exe D:/workspace/spider/text.py
>>>> __init__
>>>> __init__
>>>> 2947617811816
>>>> 2947617811816
参考文档:https://www.cnblogs.com/jayliu/p/9013155.html
__new()__与__init__()的更多相关文章
- [译]为什么在__new __()后总是调用__init __()?
原文来源: https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new 需要控制新实例的创建时,请使用 ...
- Python - 面向对象编程 - __new()__ 和单例模式
单例模式 这是一种设计模式 设计模式是前任工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性 单 ...
- Python入门基础(9)__面向对象编程_3
继承 子类自动继承父类的所有方法和属性 继承的语法: class 类名(父类名) pass 1.子类继承父类,可以直接使用父类中已经封装好的方法,不需要再次开发 2.子类可以根据需求,封装自己特有的属 ...
- Python核心编程-细节
直接从六张开始看看书里有什么. cmp() len() max() and min() sorted() and reversed() enumerate() and zip() sum() list ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- Python基本特殊方法之__new__
__new__()和不可变对象 __new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性 例:为f ...
- python 特殊方法之new
object.__new__(cls[, ...]) Called to create a new instance of class cls. __new__() is a static metho ...
- python中几个常见的魔法方法
首先,什么是魔法方法呢?在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做"魔法"方法. __ init__()方法 当一个实例被创建的时候调用的初始 ...
- Python基础:18类和实例之二
1:绑定和非绑定 当存在一个实例时,方法才被认为是绑定到那个实例了.没有实例时方法就是未绑定的.在很多情况下,调用的都是一个绑定的方法. 调用非绑定方法并不经常用到,其中一个主要的场景是:派生一个子类 ...
随机推荐
- extjs 表格为可编辑,保存后为不可编辑状态
画出表格 编辑后 思路:在初始时设置一个状态,panduan='0',此时,就是一个不可编辑的input,当点击编辑时,改变panduan = '1',即可编辑.保存是加入正则表达式的判断,在将pan ...
- 打包JavaFX11桌面应用程序
打包JavaFX11桌面应用程序 这是JavaFX系列的第二弹,第一弹在这里 在第一弹中,我们使用的是OpenJDK8,但是OpenJDK8和Oracle Java JDK不一样,它没有内置JavaF ...
- HTML5之历史记录(实现的当页面应用路由器的底层)
history hashchange与popstate 一.history history.back():加载history列表中的前一个URL history.forward():加载history ...
- clientHeight和offsetHeight
clientHeight:包括padding但不包括border.水平滚动条.margin的元素的高度.对于inline的元素这个属性一直是0,单位px,只读元素. offsetHeight:包括pa ...
- Windows下Mysql 用户忘记密码时修改密码
一般这种情况都可以用安全模式下修改来解决.安全模式下即跳过权限检查,输入账号后直接登录进mysql 1.使用管理员权限打开dos窗口,进入mysql安装目录的bin文件夹下,将Mysql服务关闭 sc ...
- export命令用来设置环境变量。
sh-# export export CONSOLE="/dev/console" export HOME="/" export LD_LIBRARY_PATH ...
- Delphi 通过ADO连接数据库
- Makefile 编译静态库文件及链接静态库
本文为原创文章,转载需指明该文链接 1.代码目录结构如下: comm/ comm/inc/apue.h 3 atexit.c Makefile 5 staticlib/lib/ staticlib ...
- AlertDialog 对话框 5种
MainActivity.class public class MainActivity extends AppCompatActivity implements View.OnClickListen ...
- 使用Gallery制作图片浏览器
MainActivity.class public class MainActivity extends AppCompatActivity implements AdapterView.OnItem ...