想当年大二的时候,在学校学习Java,
最牛逼的OO思想,用了3页纸就讲完了,还是清华大学出版社的呢。
后来全凭自己啃视频,啃代码才搞懂什么叫做OO。
现在学习Python,就用自己的方式,好好学习一次:
OO的基本,是封装,继承,多态。
首先是继承:
定义一个类:
class Bird(object): have_feather = True way_of_reproduction = 'egg'
调用这个类:
summer = Bird() print summer.way_of_reproduction
与Java不同是,Python是不需要new来实例化类的。
同样,Python的类下面是可以定方法的:
class Bird(object): have_feather = True way_of_reproduction = 'egg' def say(self, word='hi hi'): print 'i say :' + word
注意一点,所有类的函数,必须至少带有一个参数,这个参数必须是self。
类以外的函数没有这一个限制。
chk = Chicken() print chk.have_feather print chk.sat('hello')
__init__()方法
__init__()是一个特殊方法(special method)。Python里会有一些特殊方法,Python会以特别的方式处理它们。特殊方法的名字的特点是前后都有两个下划线。
__init__()方法的特殊在于,如果你在类中定义了这个方法,一旦你根据这个类建立对象,Python就会自动调用这个方法(这个过程也叫初始化)。
如:
class happyBird(Bird): def __init__(self,more_words): print 'We are happy birds.',more_words hb = happyBird('Happy,Happy!')
父类方法的重载:
class Hello(object): name = 'hello' def __init__(self): self.name='my name is hello' #类中的参数必须带有self参数 def sayhi(self): print 'hi you' class World(Hello): def __init__(self): #这里访问的是父类初始化的变量名 print 'before:',Hello.name super(World,self).__init__() #由于调用了父类的初始化构造函数,继承了父类的变量的改变 print 'after:',self.name #近似于方法重载 def sayhi(self,word='baby'): #调用父类sayhi方法 super(World,self).sayhi() print 'hi '+word def sayWorld(self): print 'hi,hello world' if __name__ == '__main__': c = World() c.sayhi() c.sayWorld()
另外,python是允许多继承的,但是这个是个非常危险的操作,建议不要随便使用。
关于Python的多态,就像JavaScript一样,直接访问对象的属性,不需要使用接口,没有类型转换。
对于类型的判断,有抓们的type()函数,和isinstance()函数判断是否某个函数的子类。
isinstance(object, classinfo) 判断实例是否是这个类或者object是变量 classinfo 是类型(tuple,dict,int,float) 判断变量是否是这个类型 class objA: pass A = objA() B = 'a','v' C = 'a string' print isinstance(A, objA) print isinstance(B, tuple) print isinstance(C, basestring) 输出结果: True True True
相关推荐
<br>对于这本书还有一点我觉得很欣慰,它不但介绍了OO思想,也很好的对函数式编程方法进行了普及,把Python语言的特点进行了很全面的介绍。对于想了解函数式编程的人,起到了很好的入门效果。而且本人也正在尝试...
解决方案按关键思想分类。 Python 练习 Python 套接字实现: /socket_multithread 。 Python OO 特性练习: /object_oriented Python 专属特性说明: /python_features 其他一些 Python 代码: /others
面向对象编程(Object-Oriented Programming,简称OO)是一种编程范式,它的核心思想是将数据和操作数据的方法封装在一起,形成对象。在C++、Java、Python等语言中,面向对象特性得到了广泛的应用。本资源提供的“OO...
《面向对象设计与模式》第二版是一本值得推荐的经典教材,它不仅提供了面向对象设计的基础理论,还通过丰富的设计模式案例帮助读者理解和实践面向对象编程的核心思想。对于希望深入学习和掌握面向对象设计的初学者来...
python的面向对象 面向对象编程 基础 私有 继承 组合,Minxi 魔法函数 魔法函数概述 构造类魔法函数 运算类魔法函数 面向对象概述 OOP的思想 接触到任意一个任务,首先想到的是任务这个世界的狗成,是由模型构成的 类...
这个算法结合了稀疏表示和低秩恢复的思想,主要用于解决矩阵 completion 和 denoising 问题。源码压缩包中的内容可能包含实现这一算法的编程代码,对于理解并应用SET_SVT算法具有很高的参考价值。 首先,矩阵填充是...
- Python的鸭子类型(Duck Typing)是一种动态类型的实现,它体现了多态的核心思想。 6. **封装**: - 封装是将数据和操作数据的代码结合在一起,保护数据不被外部直接访问,只允许通过特定的方法来操作。 - 在...
高斯-埃尔米特规则的基本思想是将无限区间通过适当的选择点(节点)和权重系数进行近似,这些节点和权重是正交多项式的零点和相应的归一化因子。对于无穷区间,这些点通常位于实数轴上,且随着阶数的增加,节点会...
通过这门课程的学习,学员不仅可以掌握Python数据处理的实用技能,还能理解并运用面向对象编程的思想,这对于从事数据分析、机器学习或软件开发等相关工作的人来说,无疑是一项宝贵的资产。无论你是初学者还是有一定...
名称 Spiffy-为您提供Spiffy Perl接口框架 概要 package Keen; use Spiffy -Base; field 'mirth'; const mood => ':-)';... if ($self->mood eq ':-(') { ... Spiffy借鉴了其他面向对象语言的思想,例如Python,Ruby,Ja
2. **代码实现**:论文中包含的代码模板可能是用Python、Java、C++等编程语言实现的,它们用来将数学模型具体化,进行数值计算或模拟实验,帮助验证模型的有效性和可行性。 3. **面向对象编程**:面向对象编程(OOP...
面向对象实现是软件工程中的一个重要阶段,涉及到将面向对象的设计思想转化为实际的代码。本章主要探讨了面向对象的程序设计语言、面向对象程序的实现特征、面向对象测试以及组件技术。 11.1 面向对象的程序设计...
【卓越亚马逊软件开发类笔试题】是针对应聘者在软件开发领域的专业知识和能力进行测试的一系列问题,旨在评估应聘者的编程能力、面向对象设计思想以及数据库管理知识。下面将对两个具体题目进行详细解答。 **题目一...
- 文中提到了多种编程语言,包括Python、Java、C、C++和C#。这些是计算机科学和软件开发中最常用的语言,显示了编程语言在教育中的核心地位。 5. 异常处理(exception handling) - 异常处理是编程中用于处理程序...
通过将面向对象的概念与现实生活进行类比,使学习者能够更好地理解和掌握面向对象的思想。 #### 什么是面向对象? 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将计算机程序设计成相互协作...
它的优点是把验证逻辑和业务逻辑分离,符合AOP(Aspect-Oriented Programming)的思想。 一、Fluent Validation的优点 * 把验证逻辑和业务逻辑分离,符合AOP思想 * 使用Fluent接口和lambda表达式,易于使用和维护 ...
js实现经典扫雷游戏 本文实例为大家分享了js实现经典扫雷游戏的具体代码,供大家参考,具体内容如下 1、写出基本的布局 2、利用js生成扫雷的table表格 3、利用随机数来做地雷在表格...11、如果是0,利用递归思想,遍
在JavaScript中,Vue框架是一种广泛应用的前端开发工具,其核心设计思想包含了观察者模式的元素。观察者模式是一种软件设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它...
本次纪要重点记录了两场具有代表性的开题论证会议,它们分别围绕《小学数学教学德育渗透研究》和《杜威道德教育思想中的悖论研究》展开讨论。这两场会议不仅为与会者提供了一个交流学术观点的平台,也为未来的研究...
这个案例没有提供完整的 JavaScript 代码,但我们可以根据描述中的“排他思想”来构建逻辑: 1. 遍历所有的选项卡(`li` 元素),清除所有内容部分(`.hidden` 类)的显示样式。 2. 当用户点击某个选项卡时,获取该...