python的__init__几种方法总结
__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__几种方法总结的更多相关文章
- Python 爬虫入门3种方法
Python 2.0 url = "http://www.baidu.com" print '第一种方法' response1 = urllib2.urlopen(url) pri ...
- python列表的11种方法
python列表的11种方法2017年11月24日 03:26:43 Milton-Long 阅读数:254版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- python—字符串拼接三种方法
python—字符串拼接三种方法 1.使用加号(+)号进行拼接 字符串拼接直接进行相加就可以,比较容易理解,但是一定要记得,变量直接相加,不是变量就要用引号引起来,不然会出错,另外数字是要转换为字 ...
- 太酷炫了!!我会Python 导包八种方法,你呢?
1. 直接 import 人尽皆知的方法,直接导入即可 >>> import os >>> os.getcwd() '/home/wangbm'复制代码 与此类似的 ...
- Python文件遍历二种方法
分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os ...
- 调试python 程序的几种方法总结
程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误 ...
- 优化Python代码的4种方法
介绍 作为数据科学家,编写优化的Python代码非常非常重要.杂乱,效率低下的代码即浪费你的时间甚至浪费你项目的钱.经验丰富的数据科学家和专业人员都知道,当我们与客户合作时,杂乱的代码是不可接受的. ...
- 求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法
今天面试,遇到面试官询求最大公约数.小学就学过的奥数题,居然忘了!只好回答分解质因数再求解! 回来果断复习下,常用方法辗转相除法和更相减损法,小学奥数都学过,很简单,就不细说了,忘了的话可以百度:ht ...
- Python单例模式的四种方法
在这之前,先了解super()和__new__()方法 super()方法: 返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法. 它有两个典型作用: a. 在单继承的类层次结构中, ...
随机推荐
- linux中常用的命令
1.向某个ip发送文件 scp name.tar root(身份)@ip:/lujing 2.重启系统 init 6 3.如果修改了ifcfg-eth0类似于网卡配置文件,修改网口,ip等设置: 需要 ...
- 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用
简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...
- Intellj IDEA光标为insert状态,无法删除内容
以前用得是社区版的IDEA,今天装了14版本的,结果导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标,并且还无法删除内容,且按删除(delete)键也只见光标往前 ...
- js中的字符替换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- textarea禁止拖拽
<textarea style="resize:none;" ></textarea>'
- 查看表结构命令(mysql和oracle)
MySQL查看表结构SQL语句 = mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; ...
- 【Android Developers Training】 1. 创建一个Android项目工程
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 31. 序言:共享简单数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- centos生成公钥私钥 securecrt通过公钥访问服务器 winscp通过公钥访问服务器
忙碌了一下午,一直到写博客现在.都在纠结阿里云服务器上配置公钥私钥,网上的说辞总是参差不齐,需要各个去综合,合理取舍.今天终于配置好了. 我就不说这种方式的重要性了,往往黑客都不需要你的登陆账户密码就 ...
- kbengine新手教程
KBEngine服务端引擎开源项目地址(github):https://github.com/kbengine/kbengine引擎下载与编译:http://kbengine.org/cn/docs/ ...