Python中Class类用法实例分析


Posted in Python onNovember 12, 2015

本文实例讲述了Python中Class类用法。分享给大家供大家参考,具体如下:

尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦。因此我们关注Python在FP上的优势的同时,还得了解一下Python在OO方面的特性。

要讨论Python的OO特性,了解Python中的Class自然是首当其冲了。在Python中定义class和创建对象实例都很简单,具体代码如下:

class GrandPa:
  def __init__(self):
    print('I\'m GrandPa')
class Father(GrandPa):
  def __init__(self):
    print('I\'m Father!')
class Son(Father):
  """A simple example class"""
  i = 12345
  def __init__(self):
    print('这是构造函数,son')
  def sayHello(self):
    return 'hello world'
if __name__ == '__main__':
  son = Son()
  # 类型帮助信息 
  print('类型帮助信息: ',Son.__doc__)
  #类型名称
  print('类型名称:',Son.__name__)
  #类型所继承的基类
  print('类型所继承的基类:',Son.__bases__)
  #类型字典
  print('类型字典:',Son.__dict__)
  #类型所在模块
  print('类型所在模块:',Son.__module__)
  #实例类型
  print('实例类型:',Son().__class__)

运行效果如下:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
这是构造函数,son
类型帮助信息: A simple example class
类型名称: Son
类型所继承的基类: (<class '__main__.Father'>,)
类型字典: {'__module__': '__main__', 'sayHello': <function Son.sayHello at 0x010194F8>, '__doc__': 'A simple example class', '__init__': <function Son.__init__ at 0x010194B0>, 'i': 12345}
类型所在模块: __main__
这是构造函数,son
实例类型: <class '__main__.Son'>
>>>

Python支持多重继承

首先第一点,你会发现Class的定义中有一个括号,这是体现继承的地方。 Java用extends,C#、C++用冒号(:),Python则用括号了。从括号中包含着两个值,聪明的你一定可以发现:Python支持多重继承;

__init__是Class中的构造函数

第二点,__init__是Class中的构造函数,两种不同形式的构造函数体现了Python支持函数重载。在构造函数中,有一个特别的参数self,其含义与我们在Java和C#中常见的this是一样的。在这里需要强调一点:在Class中定义的方法实质上也是function,但是在方法定义的时候必须包含self这个参数,而且必须将self这个参数放在第一位;

python成员变量

第三点,在Python中,你并不需要显式的声明Class的Data Members,而是在赋值的时候,被赋值的变量就相应成为了Class的Data Memebers,正如代码中的x和y。不仅你不需要显式的声明Data Members,更加特别的,你甚至可以通过del方法将Class中的Data Memebers给删掉。当我第一次看到这样的特性的时候,着实吃了一惊。毕竟OO的第一条就是封装了,但是这样的特性是不是破坏了封装的特性呢?

python方法二义性问题

第四点,由于Python支持多重继承,因此就有可能出现方法二义性问题[1]。然而由于Python遵循深度优先的搜寻法则,很好地避免了方法二义性的问题。例如在以上的代码中,MyClass同时继承于BaseClassA和BaseClassB,假设MyClass调用一个叫derivedMethod方法,derivedMethod同时定义在BaseClassA和BaseClassB中,且Signature也完全相同,那么BaseClassA中的方法将被调用。如果BaseClassA中并没有定义derivedMethod,而是BaseClassA的父类定义了这个方法的话,将会是BaseClassA的父类中derivedMethod被调用。总之,继承方法搜索的路径是先从左到右,在选定了一个BaseClass之后,将会一直沿着该BaseClass的继承结构进行搜索,直至最顶端,然后再到另外一个一个BaseClass。

就先说着这么多了,对于Python中OO的特性将会在以后的Post中有进一步的讲述。

方法二义性:由于一个类同时继承于两个或者多个父类,而在这些父类当中存在着signature完全相同的方法,那么编译器将无法判断子类将继承哪个父类中的方法,从而导致方法二义性问题。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python difflib模块示例讲解
Sep 13 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
python实现五子棋人机对战游戏
Mar 25 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
python开发之函数定义实例分析
Nov 12 #Python
python开发之字符串string操作方法实例详解
Nov 12 #Python
深入浅析Python字符编码
Nov 12 #Python
python开发之for循环操作实例详解
Nov 12 #Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 #Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 #Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 #Python
You might like
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php中异常处理方法小结
2015/01/09 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python字符串处理实现单词反转
2017/06/14 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
用Eclipse写python程序
2018/02/10 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
应届毕业生应聘自荐信范文
2014/02/26 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
社区戒毒工作方案
2014/06/04 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫