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 ...
随机推荐
- Leetcode - Letter Combination Of A Phone Number
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 去掉Windows桌面软件的快捷图标的箭头
去掉Windows桌面软件的快捷图标的箭头 怎么去除桌面快捷方式图标箭头 cmd /k reg delete "HKEY_CLASSES_ROOT\lnkfile" /v IsSh ...
- Win7怎么把运行添加到Win快捷菜单的右侧、、、
win7怎么把运行添加到Win快捷菜单的右侧... ------------------------------ 右键桌面任务栏--选择属性 ----------------------------- ...
- Composer简介及使用实例
1.PHP-FIG 官网:http://www.php-fig.org/ php编码规范: 本文档是PHP互操作性框架制定小组(PHP-FIG :PHP Framework Interoperabil ...
- Django编写RESTful API(五):添加超链接提高模型间的关联性
前言 在第四篇中,加入了用户模型,以及相关的认证和权限的功能.但是我们在使用的时候,会发现在访问http://127.0.0.1:8000/users/时看到的用户列表,不能够直接点击某个链接然后查看 ...
- mongodb 的服务启动和基本操作命令
由于在dos 下操作mongodb 很不方便 所以我推荐大家使用mongodb 的可视化工具robomongo 这个是robomongo的下载网址 https://robomongo.org/dow ...
- ThinkPhp5源码剖析之Cache
为什么需要Cache(缓存)? 假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那么可能一分钟内有几万几十万的访问量. 如果没有缓存,同样的内容就要去数据库重复查询,那可能网站一下就挂掉了 ...
- C++三种野指针及应对/内存泄露
野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指向"垃圾"内存的指 ...
- nginx.conf配置文件的简单说明
#nginx 监听原理 先监听端口 --> 再配置域名 -->匹配到就访问local 否则 没有匹配到域名就默认访问第一个监听端口的local地址# vi nginx.conf user ...
- Ubuntu16.04下安装texlive
Ubuntu 16.04下安装texlive的步骤如下: 1.下载texlive 打开终端输入:sudo apt-get install texlive-full #下载这一过程会持续10-20分钟 ...