Python的面向对象思想分析


Posted in Python onJanuary 14, 2015

本文实例讲述了Python的面向对象思想。分享给大家供大家参考。具体分析如下:

面向对象的基本思想是封装,继承,多态。

首先是继承:

定义一个类:

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 

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python 动态加载的实现方法
Dec 22 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
解决python删除文件的权限错误问题
Apr 24 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
python 对key为时间的dict排序方法
Oct 17 Python
Python 占位符的使用方法详解
Jul 10 Python
python 列表推导式使用详解
Aug 29 Python
np.random.seed() 的使用详解
Jan 14 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
python调试工具Birdseye的使用教程
May 25 Python
为python设置socket代理的方法
Jan 14 #Python
Python单例模式实例分析
Jan 14 #Python
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 #Python
Python中使用Tkinter模块创建GUI程序实例
Jan 14 #Python
更改Python命令行交互提示符的方法
Jan 14 #Python
Python的迭代器和生成器使用实例
Jan 14 #Python
python实现带验证码网站的自动登陆实现代码
Jan 12 #Python
You might like
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
服务器web工具 php环境下
2010/12/29 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
PHP5函数小全(分享)
2013/06/06 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
理解AngularJs指令
2015/12/10 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
Python创建xml的方法
2015/03/10 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
机电一体化毕业生求职信
2013/11/02 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
司机岗位职责说明书
2014/07/29 职场文书
受伤赔偿协议书
2014/09/24 职场文书
小学生交通安全寄语
2015/02/27 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
windows系统搭建WEB服务器详细教程
2022/08/05 Servers