参考

__init__()

这个方法一般用于初始化一个类

但是 当实例化一个类的时候, __init__并不是第一个被调用的, 第一个被调用的是__new__

#!/usr/bin/env python
# coding:utf-8 class Test(object):
"""
用于初始化类
"""
def __init__(self, a, b):
self.a = a
self.b = b def res(self):
return (self.a, self.b) t = Test(100, 200)
print t.res() """
(100, 200)
"""

__str__()

这是一个内置方法, 只能返回字符串, 并且只能有一个参数self

#!/usr/bin/env python
# coding:utf-8 class Test(object):
"""
用于初始化类
"""
def __init__(self, a, b):
self.a = a
self.b = b def res(self):
return (self.a, self.b) def __str__(self):
return '这是一个类' t = Test(100, 200)
print t.__doc__
print '-----'
print t """
用于初始化类 -----
这是一个类
"""

__new__()

  • __new__方法是创建类实例的方法, 创建对象时调用, 返回当前对象的一个实例
  • __init__方法是类实例创建之后调用, 对当前对象的实例的一些初始化, 没有返回值

先看旧式类的例子

class Test:
def __init__(self, age=20):
print '__init__在运行'
self.age = 20 def __new__(cls):
print '__new__在运行'
return super(Test, cls).__new__(cls) t = Test() """
__init__在运行
"""

旧式类没有__new__()方法


新式类的__new__

#!/usr/bin/env python
# coding:utf-8 class Test(object):
def __init__(self, age):
print '__init__在运行'
self.age = age def __new__(cls, age):
print '__new__在运行'
return super(Test, cls).__new__(cls, age) t = Test(20) """
__new__在运行
__init__在运行
"""

上例可以看出__new__是在__init__之前执行的

上例的执行逻辑:

  • 先执行t = Test(20)
  • 首先执行age参数来执行Test类的__new__()方法, 这个__new__方法会返回Test类的一个实例(通常使用)

__call__()

对象通过提供一个__call__(self, *args, *kwargs)方法可以模拟函数的行为, 如果一个对象提供了该方法, 可以向函数一样去调用它

# -*- coding: utf-8 -*-

class Test(object):
def __init__(self):
print 100 def __new__(cls):
print 200
return super(Test, cls).__new__(cls) def __call__(self, x):
print 300 t = Test()
t(100) """
200
100
300
"""

python的__init__几种方法总结的更多相关文章

  1. Python 爬虫入门3种方法

    Python 2.0 url = "http://www.baidu.com" print '第一种方法' response1 = urllib2.urlopen(url) pri ...

  2. python列表的11种方法

    python列表的11种方法2017年11月24日 03:26:43 Milton-Long 阅读数:254版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  3. python—字符串拼接三种方法

    python—字符串拼接三种方法   1.使用加号(+)号进行拼接 字符串拼接直接进行相加就可以,比较容易理解,但是一定要记得,变量直接相加,不是变量就要用引号引起来,不然会出错,另外数字是要转换为字 ...

  4. 太酷炫了!!我会Python 导包八种方法,你呢?

    1. 直接 import 人尽皆知的方法,直接导入即可 >>> import os >>> os.getcwd() '/home/wangbm'复制代码 与此类似的 ...

  5. Python文件遍历二种方法

    分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os ...

  6. 调试python 程序的几种方法总结

    程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误 ...

  7. 优化Python代码的4种方法

    介绍 作为数据科学家,编写优化的Python代码非常非常重要.杂乱,效率低下的代码即浪费你的时间甚至浪费你项目的钱.经验丰富的数据科学家和专业人员都知道,当我们与客户合作时,杂乱的代码是不可接受的. ...

  8. 求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法

    今天面试,遇到面试官询求最大公约数.小学就学过的奥数题,居然忘了!只好回答分解质因数再求解! 回来果断复习下,常用方法辗转相除法和更相减损法,小学奥数都学过,很简单,就不细说了,忘了的话可以百度:ht ...

  9. Python单例模式的四种方法

    在这之前,先了解super()和__new__()方法 super()方法: 返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法. 它有两个典型作用: a. 在单继承的类层次结构中, ...

随机推荐

  1. 【转载】Windows系统下删除ubuntu

    原始日期:2013-11-02 15:51 以windows7为例:   用MbrFix.exe修复MBR 卸载Windows/Linux双系统中的Ubuntu1.如果你有Windows系统安装盘/启 ...

  2. 数据结构与算法(c++)——查找二叉树与中序遍历

    查找树ADT--查找二叉树 定义:对于树中的每个节点X,它的左子树中的所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项. 现在给出字段和方法定义(BinarySearchTree.h) # ...

  3. 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)

    除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络. Docker 提供三种 user-defined 网络驱动:bridge ...

  4. 小程序之发起请求 wx.request(object)的坑

    这是官方的API,然后官方的实例中 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { ...

  5. RunTime 运行时

    简单介绍RunTime 运行时的用法 以下操作都需要导入头文件 #import <objc/message.h> #pragma mark -- 发消息 //OC方法调用的本质就是让对象发 ...

  6. Linux文件属性上

    文件属性概述(ls -lhi) linux里一切皆文件Linux系统中的文件或目录的属性主要包括:索引节点(inode),文件类型,权限属性,链接数,所归属的用户和用户组,最近修改时间等内容: 解释: ...

  7. mysql性能监控工具

    参考文档: http://www.linuxidc.com/Linux/2012-09/70459.htm 1.记录慢查询SQL #配置开启 (linux)修改my.cnf: log-slow-que ...

  8. java使用Junit工具进行单元测试

    目录 1.类的定义: 2.Junit工具的使用: 3.对该类进行单元测试并查看结果: 4.记录各个阶段的时间 5.将过程记录在个人博客上(github地址) 1.类的定义:类是同一事物的总称,类是封装 ...

  9. 英文版windows7中文软件显示乱码的解决办法

    一.打开控制面板,修改语言的归属地为China 修改完成之后重启,一般能解决大部分问题,如果依然有部分显示乱码,就需要去修改注册表

  10. WM_COPYDATA传送指针数据类型的问题

    WM_COPYDATA传送指针数据的问题 var       cdds:TcopyDataStruct;     strAnsi:string;begin      cdds:=PCopyDataSt ...