《python基础教程》笔记之 更加抽象
- 方法、函数和特性
函数和方法的区别在于self参数,方法(绑定方法)将它们的第一个参数帮顶到所属的实例上,因此这个参数可以不必提供。可以将特性绑定到一个普通函数上,这样就不会有特殊的self参数了,换言之,特性可以绑定到方法上,也可以绑定到函数上,两者的区别便是方法将自己绑定到了一个实例上,如
>>> class Class:
def method(self):
print 'I have'
>>> def function():
print 'i do not'
>>> instance = Clas()
>>> instance = Class()
>>> instance.method()
I have
>>> instance.method = function
>>> instance.method()
i do not
self参数并不取决于调用方法的方式,目前使用的是实例调用方法,可以随意使用引用同一个方法的其他变量,换言之,self参数的传入,并不仅仅是在实例调用方法时发生,如果方法被其它变量引用,而此变量在使用时,self参数同样会自动传入,如
>>> class Bird:
song = 'hello'
def sing(self):
print self.song >>> bird = Bird()
>>> bird.sing()
hello
>>> birdsong = bird.sing
>>> birdsong()
hello
- 私有化的技巧
为了让方法或者特性变为私有,只要在它的名字前面加上双下划线即可,而在类的内部定义中,这些名字都被“翻译”成前面加上单下划线和类名的形式;或者使用单下划线,也会有一些实际效果,如不能被带星号的imports语句(from module import *)导入。
- 类的命名空间
类的定义其实就是执行代码块,所有位于class语句中的代码都在特殊的命名空间中执行 --- 类命名空间,如
>>> class C:
print 'Class C being defined ...' Class C being defined ...
>>> class MemberCounter:
member = 0
def init(self):
MemberCounter.member += 1 >>> m1 = MemberCounter()
>>> m1.init()
>>> MemberCounter.member
1
>>> m2 = MemberCounter()
>>> m2.init()
>>> MemberCounter.m
>>> MemberCounter.member
2
- 面向对象模型相关
草图步骤:
1. 写下问题的描述(程序要做什么?),把所有名词、动词和形容词加下划线
2.对于所有名词,用作可能的类
3.对于所有的动词,用作可能的方法
4.对于所有的形容词,用作可能的特性
5.把所有方法和特性分配到类
精炼模型:
1.写下(或者想象)一系列的使用实例----也就是程序应用时的场景,试着包括所有的功能
2.一步步考虑每个使用实例,保证模型包括所有需要的东西。如果有些遗漏的话就添加进来。如果某处不太正确则改正。继续,直到满意为止。
- 其他
将其它类名写在class语句后的圆括号内可以指定超类,如
#Filter是个用于过滤序列的通用类,事实上它不能过滤任何东西
class Filter:
def init(self):
self.block = []
def filter(self, sequence):
return [x for x in sequence if x not in self.block]
#SPAMFilter是Filter的子类,可以将序列中的“SPAM”过滤
class SPAMFilter(Filter):#SPAMFilter 是 Filter的子类
def init(self):#重写Filter超类中的init方法
self.block = ['SPAM']
结果
>>> f = Filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
>>> s = SPAMFilter()
>>> s.init()
>>> s.filter(['SPAM', 'egg', 'bacons', 'SPAM''SPAM''SPAM''SPAM'])
['egg', 'bacons', 'SPAMSPAMSPAMSPAM']
issubclass -- 查看一个类是否是另一个类的子类
__bases__ -- 获得已知类的基类们
isinstance -- 检查一个对象是否是一个类的实例
__class__ -- 知道一个对象属于哪个类
hasattr -- 检查所需的方法是否已经存在
getattr -- 获取对象特性
setattr -- 设置对象的特性
《python基础教程》笔记之 更加抽象的更多相关文章
- python基础教程笔记—即时标记(详解)
最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...
- python基础教程笔记—画幅好画(详解)
今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...
- Python基础教程笔记——第7章:更加抽象(类)
下面进入Python的面向对象: 对象的魔力: 多态:---可以对不同类的对象使用同样的操作 封装:---对外部隐藏对象内部的工作方式 继承:---以普通的类为基础建立专门的类对象 (1)多态: is ...
- Python基础教程笔记——第6章:抽象(函数)
(1)计算裴波那契数列: fbis=[0,1] num=int(input("please input the number")) for i in range(num-2): f ...
- python基础教程笔记 第1单元 && 第2单元
1.http://docs.python.org/dev/3.0/whatsnew/3.0.htmlpython-announce-listpython-help2.交互式编译器3.非整数除法 .1. ...
- Python基础教程笔记 第二章
本章的名字虽然叫列表和元组,但是本章讲的最多的是列表,元祖指讲了很少的一部分.因为元组和列表很多方面都是一样的. 列表和元组的区别:列表可以被修改,元祖不可以被修改. python包含的6种内建序列: ...
- Python基础教程笔记 第一章
/ 表示整除,当导入_future_模块中的version时,/ 表示正常的的除法, 此时可用//表示整除,不论数字是整型还是浮点型,都可以用//表示整除. ** 表示幂次方 例如 2**3 ...
- Python基础教程笔记——第4章:字典
字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...
- Python基础教程笔记——第2章:列表和元组
python shell 里重复上一次的命令:Alt+p 2.3 列表:Python的苦力 (1)list函数 (2)列表赋值,不蹦蹦为一个元素不存在的位置赋值 (3)删除元素,del name[1] ...
- Python基础教程笔记——第1章
1.8 函数 pow(x,y) x^y abs(x) 取数的绝对值 round(x) 会把浮点数四舍五入为最接近的整数 floor(x) 向下取整的函数,但是需要先imp ...
随机推荐
- 转:Windows下载Android源码
原文来自于:http://blog.csdn.net/hlf48641715/article/details/7188450 下载msysgit,安装 官方下载:http://code.google. ...
- css3 之表格隔行分色显示
<html> <head> <title></title> <style type="text/css"> table{ ...
- Gridview中修改某列的背景色
Gridview中状态列的值是1,某列的背景是是绿色状态字段是:archivesStatus protected void gvInfo_RowDataBound(object sender, Gri ...
- PowerShell 转码函数 Default->UTF8
$chs='你好' function converToUft8($str){ $bs=[System.Text.Encoding]::Default.GetBytes($str); $u8Char=[ ...
- 百度搜索URL参数 搜索关键字
http://www.baidu.com/s?wd=关键字 wd(Keyword):查询的关键词: http://www.baidu.com/s?wd=关键字&cl=3 cl(Class):搜 ...
- 组播MAC地址转换关系及唯一性处理
组播地址与其对应的组播MAC换算关系如下: 组播MAC=组播MAC标识+组播IP后23位对应的二进制位(32位的IP地址取后23位导致32组IP地址对应的多播IP相同) (IANA把01:00:5 ...
- java foreach记录
实现原理解释: http://blog.csdn.net/a596620989/article/details/6930479 http://stackoverflow.com/questions/8 ...
- JS浏览器对象-History对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 我的SD卡乱码解决方案
转载请注明出处.chendesheng1988是原作者. 问题描述:射频模块读取证件信息后,串口读取的信息存到SD卡,存进去发现汉字是乱码. 解决方案:使用函数WideCharToMultiByte搞 ...
- lesson1:压测普通网页
本文展示了利用jmeter来压力测试普通网页,具体步骤如下: 1.添加[线程组]“lesson1压测普通网页”,“线程数”设置为10:“循环测试“设置为50,如图所示: 2.添加一个"htt ...