文档章节

Python的OO思想

吐槽的达达仔
 吐槽的达达仔
发布于 2014/12/05 22:18
字数 639
阅读 30
收藏 0

想当年大二的时候,在学校学习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

  

本文转载自:http://dacoolbaby.iteye.com/blog/1924002

吐槽的达达仔
粉丝 28
博文 104
码字总数 7105
作品 0
广州
程序员
私信 提问
几种计算机语言的评价

今天在阮一峰博客上看到的文章,觉得很有意思特地发到OSC上,可能已经有人转发过类似的文章,重复请见谅,以下是正文 ------------------------------------------------------------------...

wysjri
2011/12/02
1K
16
开源领袖谈UNIX下的编程语言

C语言 虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸。对于那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。 ...

kouxunli1
2015/01/07
276
0
Python 聊天室 II(SimpleXMLRPCServer模块实现)

并不是上一个用SocketServer的聊天室的延续。用远程调用完成的聊天室。 正好有Java的RMI聊天室的作业,就先用Python写了一个简单的类似远程调用的东西,逻辑完成之后,在Java上写一遍也是水到...

FuniK
2012/12/19
754
0
Python的Cython在Windows环境下的部署安装

大学课程主教java,搞过java web 后,突发感想对于OO语言的了解,以及设计模式与OO语言的优美的配合,但同时也发现java开发的周期性十分长,于是就四处需找不错的语言,终于发现了Python。 ...

WilsonET
2013/04/06
10.5K
1
转行零基础该如何学Python?这些一定要明白!

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家详细解读一下这个问题。...

猫咪编程
2018/07/21
181
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部