Python学习笔记009_构造与析构
>>> # 魔法方法
>>>
>>> # 魔法方法总是被双下划线包围,例如 __init__
>>> # 魔法方法是面向对象的Python的一切
>>> # 魔法方法的“魔力”体现在它们总能够在适当的时候被自动调用
>>>
>>> # __init__(self[,...]) 相当于其它语言的构造方法,在类对象实例化时会被自动调用
>>> # __init__方法的返回值是None,绝对不能写return
>>> class Rectangle:
def __init__(self,x,y):
self.x = x
self.y = y
def getPeri(self): # 获取矩形的周长
return (self.x + self.y) * 2
def getArea(self):
return self.x * self.y
>>> rect = Rectangle(3,4)
>>> rect.getPeri()
14
>>> rect.getArea()
12
>>>
>>> # __init__()方法并不是第一个被调用的方法,而是 __new__(Cls[,...])
>>>
>>> # __new__ 方法,我们平时极少去重写它
>>>
>>> # 有一种情况需要重写__new__方法,就是当继承一个不可变类时,又需要进行修改
>>>
>>> class CapStr(str):
def __new__(cls,string):
string=string.upper()
return str.__new__(cls,string)
>>> a = CapStr("I love you !")
>>> a
'I LOVE YOU !'
>>>
>>> # 如果说__init__方法和__new__方法是构造器的话,那么__del__方法就是析构方法
>>> # 当对象要被销毁时 __del__(self)方法会被自动调用,它是当垃圾回收机制使用的
>>>
>>> # __del__方法,并不是说我们执行了 del obj就会被调用,而是所有对它的引用都被del之后,才会被调用
>>> class C:
def __init__(self):
print("我是__init__方法,我被调用了...")
def __del__(self):
print("我是__del__方法,我被调用了...")
>>> c = C()
我是__init__方法,我被调用了...
>>> c2 = c
>>> del c
>>> del c2
我是__del__方法,我被调用了...
>>> # time模块的一个应用
>>>
>>> # 这里我们重点使用 localtime()方法,它返回的是一个 时间元组,我们既可以通过索引取相应的值,也可以通过属性名取相应的值
>>>
time 模块详解(时间获取和转换)
http://bbs.fishc.com/thread-51326-1-1.html
>>> # 重写魔法方法 __str__() __rept__() ,调用对象或者print对象时就直接打印了我们返回的内容
>>>
>>> class A():
def __str__(self):
return '阿黄我爱你'
>>> class B():
def __repr__(self):
return '杨伟,我也爱你'
>>> a = A()
>>> b = B()
>>>
>>> a
<__main__.A object at 0x0215F050>
>>> print(a)
阿黄我爱你
>>> b = B()
>>> b
杨伟,我也爱你
>>> print(b)
杨伟,我也爱你
>> # 基本要求:
>>> # -- 定制一个计时器的类
>>> # -- start和stop方法代表启动计时和停止计时
>>> # -- 假设计时器对象t1,print(t1)和直接调用他
>>> # t1均显示结果
>>> # 当计时器未启动或已经停止计时,调用stop方法会给予温馨的提示
>>> # 两个计时器对象可以进行加法运算 t1 + t2
>>>
>>> # Python提供了一些属性访问,会被自动调用
>>>
>>> # __getattr__(self,name)
>>> # 定义当用户试图获取一个不存在的属性时的行为
>>>
>>> # __getattribute__(self,name)
>>> # 定义当该类的属性被访问时的行为
>>>
>>> # __setattr(self,name,value)
>>> # 定义当一个属性被设置时的行为
>>>
>>> # __delattr__(self,name)
>>> # 定义当一个属性被删除时的行为
>>> class C:
def __getattr__(self,name):
print("getattr")
def __getattribute__(self,name):
print("getattribute")
return super().__getattribute__(name)
def __setattr__(self,name,value):
print("setattr")
super().__setattr__(name,value)
def __delattr__(self,name):
print("delattr")
super().__delattr__(name)
>>>
>>> c = C()
>>> c.x
getattribute
getattr
>>> c.x=1
setattr
>>> c.x
getattribute
1
>>> del c.x
delattr
>>>
# 以字典的形式列出对象的属性 __dict__
>>>
>>> # 写一个矩形类,默认有宽高两个属性
>>> # 如果为一个名叫square的属性赋值,说明这是一个正方形,值就是正方形的变成,此时宽和高都应该等于边长
class Rectangle:
def __init__(self,width = 0,height = 0):
self.width = width
self.height = height
def __setattr__(self,name,value):
if(name=='square'):
self.width = value
self.height = value
else:
#第一种写法,调用基类的setattr方法
#super().__setattr__(name,value)
# 第二种写法,使用 __dict__
self.__dict__[name] = value
def getArea(self):
return self.width*self.height
>>> r1 = Rectangle(4,5)
>>> r1.getArea()
20
>>> r1.square = 3
>>> r1.width
3
>>> r1.height
3
>>> r1.getArea()
9
>>>
Python学习笔记009_构造与析构的更多相关文章
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- 【python学习笔记】9.魔法方法、属性和迭代器
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- Python 学习笔记(下)
Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
随机推荐
- eclipse自动提示设置以及问题:去除变量自动提示(图文详解)
第一件事 eclipse设置为自动提示 配置步骤: 1 Window > Preferences > Java > Editor > Content Assist 2 &quo ...
- jenkins 设置 gitlab web hooks
背景 接口自动化期望代码push后触发实现持续集成,代码push后,自动化执行jenkins的job. 步骤 准备工作 工具:jenkins,gitlab jenkins需要安装插件:git plug ...
- Centos 6.5安装Python3.6
好不容易在Centos 6.5上安装成功Python3.6,在这里记录出来,以帮助其他的人第一次不要花太多时间.总的来看,步骤很简单,新手网上搜资料,可能是对于一些问题的解决方案,对于第一次安装可能麻 ...
- SpringBoot 注解事务声明式事务
转载请注明: http://www.cnblogs.com/guozp/articles/7446477.html springboot 对新人来说可能上手比springmvc要快,但是对于各位从sp ...
- js 在遍历时只会显示最后一个遍历到的结果
在做项目时遇到了一个关于遍历的问题, 前提是:在ul中有n个li每个li从后台获取的数据中有一个sign的字段,当sign等于0时(li未被点击过)li会显示一个红点,当sign不等于0时(li已被点 ...
- [2017-05-31]Abp介绍和经验分享-目录
很久没动博客了,人比较懒. 最近想写点啥,主要就介绍下ABP框架和我这两年的使用经验. 文档翻译之类的工作就算了,需要的请参考: 官方文档 PS:官方文档末尾有中文文档的链接,这里就不贴了 先列个提纲 ...
- 新的表格展示利器 Bootstrap Table Ⅱ
上一篇文章介绍了Bootstrap Table的基本知识点和应用,本文针对上一篇文章中未解决的文件导出问题进行分析,同时介绍BootStrap Table的扩展功能,当行表格数据修改. 1.B ...
- jmeter ---json几种读取方式,ArrayList循环读取
在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理. 举例一个接口的response 格式如下: { "data" : { "devic ...
- Javascript用数组实现栈和队列
栈是遵循后进先出(LIFO)规则的一种有序集合,比如桌上的一叠书,我们只能从上面放或取. 队列是遵循先进先出(FIFO)规则的一种有序集合,比如排队,先排到的先离开. 数组也是一种有序的集合,它与上面 ...
- Java内存溢出分析方法(Eclipse Memory Analyzer 使用简单入门)
转载至:http://outofmemory.cn/java/jvm/OutOfMemoryError-analysis 工具 安装Memory Analyse Tools(MAT) 工具, 可以直接 ...