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数据结构之Array用法实例
Oct 09 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
Python入门教程之运算符与控制流
Aug 17 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
在python中修改.properties文件的操作
Apr 08 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
资料注册后发信小技巧
2006/10/09 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
php商品对比功能代码分享
2015/09/24 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
vue多次循环操作示例
2019/02/08 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
通用C#笔试题附答案
2016/11/26 面试题
2016年情人节问候语
2015/11/11 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS