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 ...
随机推荐
- 调用Class.forName()要抛出异常
今天学JDBC时,用到下面的程序: package bo; import java.sql.Connection; import java.util.ArrayList; import java.ut ...
- 复杂JSON反序列化为类对象
有3种常用的反序列化库,gson和fastjson都很棒,json-lib有很大的局限性不推荐使用! 1. net.sf.json(json-lib) 只能用于解析简单的JSON,稍微复杂点的例如,类 ...
- led模组的优点和却点
插件模组 1.是指DIP封装的灯将灯脚穿过PCB板,经由过程焊接将锡灌满在灯孔内,由这种工艺做成的LED模组便是插灯模组:益处是视角年夜,亮度高,散热好:谬误舛错是像素密度小. 表贴模组 1.表贴也叫 ...
- vue-cli脚手架npm相关文件解读(3)webpack.dev.conf.js
系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...
- Requests抓取有道翻译结果
Requests比urllib更加方便,抓取有道翻译非常的简单. import requests class YouDao(): def __init__(self,parm): ...
- Jmeter之解决烦人的中文乱码问题
Jmeter是一款国外开源工具,所以就跟LR一样,对中文的支持不是很好,经常会有同学录制脚本后回放或者是发送HTTP请求,看到响应报文里面有乱码! 那如何才能解决这个问题呢?我们分2个情况来分析: 一 ...
- 史上最全前端面试题(含答案)-A篇
HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所 ...
- 为什么内存使用2G的苹果手机比内存使用4G的安卓机更流畅?
这是在国外一家网站看到的,分析得不错,原文如下: Why does the iPhone require less RAM than Android devices? There are people ...
- login shell与non-login shell的区别
Bash应该是我们每天日常工作接触最多的东西了,就像我们最忠实的朋友,我们有必要了解一下这位朋友的“习性”. Bash有几种不同的运行模式,login shell与non-login shell,in ...
- hashlib使用时出现: Unicode-objects must be encoded before hashing
# hashlib.md5(data)函数中,data参数的类型应该是bytes# hash前必须把数据转换成bytes类型>>> from hashlib import md5 F ...