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中子类继承父类的__init__方法实例
Dec 15 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
python3+PyQt5泛型委托详解
Apr 24 Python
Python 打印中文字符的三种方法
Aug 14 Python
Python如何在DataFrame增加数值
Feb 14 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
python与pycharm有何区别
Jul 01 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python自动化实战之接口请求的实现
May 30 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 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
Python实现数据库编程方法详解
2015/06/09 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
应届大学生求职的自我评价
2013/11/17 职场文书
部队万能检讨书
2014/02/20 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏