《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语句后的圆括号内可以指定超类,如
class SubClass(SuperClass):
def class
issubclass -- 查看一个类是否是另一个类的子类
__bases__ -- 获得已知类的基类们
isinstance -- 检查一个对象是否是一个类的实例
__class__ -- 知道一个对象属于哪个类
hasattr -- 检查所需的方法是否已经存在
getattr -- 获取对象特性
setattr -- 设置对象的特性
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。