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实现dnspod自动更新dns解析的方法
Feb 14 Python
python人人网登录应用实例
Sep 26 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
python使用fork实现守护进程的方法
Nov 16 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 Python
python写入文件自动换行问题的方法
Jul 05 Python
Python argparse模块应用实例解析
Nov 15 Python
Python控制鼠标键盘代码实例
Dec 08 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 Python
python 对图片进行简单的处理
Jun 23 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数组操作
2011/12/30 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
两款万能的php分页类
2015/11/12 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
python数据结构之链表详解
2017/09/12 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
怎样声明接口
2014/09/19 面试题
电气自动化自荐信
2013/10/10 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
学雷锋月活动总结
2014/04/25 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
庆祝儿童节标语
2014/10/09 职场文书
初中班长竞选稿
2015/11/20 职场文书
python小程序之飘落的银杏
2021/04/17 Python