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 23 Python
python调用新浪微博API项目实践
Jul 28 Python
Python开发常用的一些开源Package分享
Feb 14 Python
Python reduce()函数的用法小结
Nov 15 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
Python常见数据类型转换操作示例
May 08 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
python多线程实现TCP服务端
Sep 03 Python
Python中的引用和拷贝实例解析
Nov 14 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
jupyter 添加不同内核的操作
Feb 06 Python
Python 制作自动化翻译工具
Apr 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分页代码学习示例分享
2014/02/20 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
租房协议书怎么写
2014/04/10 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
教师创先争优承诺书
2015/04/27 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android