• 方法、函数和特性

函数和方法的区别在于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基础教程》笔记之 更加抽象的更多相关文章

  1. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  2. python基础教程笔记—画幅好画(详解)

    今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...

  3. Python基础教程笔记——第7章:更加抽象(类)

    下面进入Python的面向对象: 对象的魔力: 多态:---可以对不同类的对象使用同样的操作 封装:---对外部隐藏对象内部的工作方式 继承:---以普通的类为基础建立专门的类对象 (1)多态: is ...

  4. Python基础教程笔记——第6章:抽象(函数)

    (1)计算裴波那契数列: fbis=[0,1] num=int(input("please input the number")) for i in range(num-2): f ...

  5. python基础教程笔记 第1单元 && 第2单元

    1.http://docs.python.org/dev/3.0/whatsnew/3.0.htmlpython-announce-listpython-help2.交互式编译器3.非整数除法 .1. ...

  6. Python基础教程笔记 第二章

    本章的名字虽然叫列表和元组,但是本章讲的最多的是列表,元祖指讲了很少的一部分.因为元组和列表很多方面都是一样的. 列表和元组的区别:列表可以被修改,元祖不可以被修改. python包含的6种内建序列: ...

  7. Python基础教程笔记 第一章

    /  表示整除,当导入_future_模块中的version时,/ 表示正常的的除法, 此时可用//表示整除,不论数字是整型还是浮点型,都可以用//表示整除. ** 表示幂次方  例如 2**3    ...

  8. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  9. Python基础教程笔记——第2章:列表和元组

    python shell 里重复上一次的命令:Alt+p 2.3 列表:Python的苦力 (1)list函数 (2)列表赋值,不蹦蹦为一个元素不存在的位置赋值 (3)删除元素,del name[1] ...

  10. Python基础教程笔记——第1章

    1.8 函数 pow(x,y) x^y abs(x)          取数的绝对值 round(x)   会把浮点数四舍五入为最接近的整数 floor(x)     向下取整的函数,但是需要先imp ...

随机推荐

  1. eclipse:运行 Android 项目时出现 “Unable to execute dex: Multiple dex files define” 解决方法

    android 项目在eclipse 出现Unable to execute dex: Multiple dex files define Conversion to Dalvik format fa ...

  2. Android利用百度地图定位

    百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: ...

  3. android弹出式菜单、弹出式对话框、弹出式窗口

    http://www.open-open.com/lib/view/open1389767042601.html http://www.open-open.com/lib/view/open13321 ...

  4. PHP and java

    问题补充: 为什么不选用优秀的ASP.NET,京东做的不是很成功嘛?-----------------------------------------------------------------首 ...

  5. MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现

    1. 问题描述 在使用MyBatis,我们经常会遇到这种情况:SELECT两个字段,需要返回一个Map,其中第一个字段作为key,第二个字段作为value.MyBatis的MapKey虽然很实用,但并 ...

  6. 【HDOJ】1497 Simple Library Management System

    链表. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXM 1001 #def ...

  7. HDU_2033——时间加法

    Problem Description HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱.这个题 ...

  8. Cplus

    1,factorials[i] = i * factorials[i - 1]; #include <iostream>using namespace std; const int ArS ...

  9. JavaScript 定义类

    ES6以前: function Point(x, y) { this.x = x; this.y = y; } Point.prototype.hello= function () { return ...

  10. nexus5 root教程

    转载自: http://www.inexus.co/article-1280-1.html http://www.pc6.com/edu/71016.html https://download.cha ...