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 24 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
pandas表连接 索引上的合并方法
Jun 08 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
django 环境变量配置过程详解
Aug 06 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Python通过Pillow实现图片对比
Apr 29 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 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的SQL注入过程分析
2012/01/06 PHP
php实现简单的上传进度条
2015/11/17 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
jquery获取input的value问题说明
2010/08/19 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
canvas绘制七巧板
2017/02/03 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
浅述python2与python3的简单区别
2018/09/19 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
优秀民警事迹材料
2014/01/29 职场文书
会员卡清退活动总结
2014/08/27 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
关于JavaScript轮播图的实现
2021/11/20 Javascript
golang操作rocketmq的示例代码
2022/04/06 Golang