Python Class正确应用代码示例剖析

开发 后端
Python Class在面向对象中是一个比较重要的应用。那么再接下来的文章中,我们将会针对这方面的问题做一个详细介绍。

大家都知道,Python编程语言虽然使用简单,易于大家使用,但是其功能还是比较强大的。特别是在面向对象方面的优势更为明显。我们今天将会为大家详细介绍一下Python Class的应用方式,以此来加深对这方面的认识。

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

 

  1. class MyClass(BaseClassA, BaseClassB):  
  2. def __init__(self):  
  3. self.x = 0 
  4. self.y = 0 
  5. def __init__(self, x, y):  
  6. self.x = x  
  7. self.y = y 

 

"以上构造函数的用法有误,正确用法请看来自Qiangning Hong的FeedBack"

 

  1. myClass = MyClass()  
  2. print myClass.x, myClass.y  
  3. myClass.z = 10 
  4. print myClass.z  
  5. del myClass.x 

 

看完以上的代码,您的心中是不是有很多的问题呢? 好,就让我来一一作答吧。#t#

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

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

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

第四点,由于Python支持多重继承,因此就有可能出现方法二义性问题。然而由于Python遵循深度优先的搜寻法则,很好地避免了方法二义性的问题。例如在以上的代码中,MyClass同时继承于BaseClassA和BaseClassB,假设MyClass调用一个叫derivedMethod方法,derivedMethod同时定义在BaseClassA和BaseClassB中,且Signature也完全相同,那么BaseClassA中的方法将被调用。如果BaseClassA中并没有定义derivedMethod,而是BaseClassA的父类定义了这个方法的话,将会是BaseClassA的父类中derivedMethod被调用。

总之,继承方法搜索的路径是先从左到右,在选定了一个BaseClass之后,将会一直沿着该BaseClass的继承结构进行搜索,直至最顶端,然后再到另外一个一个BaseClass。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-03-05 15:01:29

Python解析XML

2010-03-04 13:30:11

Python file

2010-05-28 15:16:40

MySQL 资源

2009-12-07 14:38:14

PHP foreach

2010-02-22 10:42:12

WCF Stream

2010-03-03 17:58:16

Python同步队列

2010-03-03 17:33:52

Python读取XML

2010-03-04 14:02:51

Python大小写

2010-02-22 14:09:08

WCF Dispose

2010-05-25 18:01:35

linux MySQL

2010-05-28 19:20:36

MySQL mysql

2010-03-04 14:51:21

Python Conf

2010-07-21 10:50:48

SQL Server存

2010-07-26 17:43:34

SQL Server

2010-02-05 17:49:24

C++常量引用

2010-02-05 14:12:46

C++声明放置

2010-08-18 16:45:40

IBM DB2 Cat

2021-07-02 16:13:01

区块链金融数据库

2010-01-25 11:29:33

Android计时器

2010-02-01 15:26:44

C++ inline函
点赞
收藏

51CTO技术栈公众号