`

Python中的Class

阅读更多

        尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦。因此我们关注Python在FP上的优势的同时,还得了解一下Python在OO方面的特性。
        要讨论Python的OO特性,了解Python中的Class自然是首当其冲了。在Python中定义class和创建对象实例都很简单,具体代码如下:

class MyClass(BaseClassA, BaseClassB):
    def __init__(self):
        self.x 
= 0
        self.y 
= 0
    def __init__(self, x, y):
        self.x 
= x
        self.y 
= y  

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

myClass 
= MyClass()
print myClass.x, myClass.y
myClass.z 
= 10
print myClass.z
del myClass.x

看完以上的代码,您的心中是不是有很多的问题呢? 好,就让我来一一作答吧。
       首先第一点,你会发现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方法将Class中的Data Memebers给删掉。当我第一次看到这样的特性的时候,着实吃了一惊。毕竟OO的第一条就是封装了,但是这样的特性是不是破坏了封装的特性呢?
       第四点,由于Python支持多重继承,因此就有可能出现方法二义性问题[1]。然而由于Python遵循深度优先的搜寻法则,很好地避免了方法二义性的问题。例如在以上的代码中,MyClass同时继承于BaseClassA和BaseClassB,假设MyClass调用一个叫derivedMethod方法,derivedMethod同时定义在BaseClassA和BaseClassB中,且Signature也完全相同,那么BaseClassA中的方法将被调用。如果BaseClassA中并没有定义derivedMethod,而是BaseClassA的父类定义了这个方法的话,将会是BaseClassA的父类中derivedMethod被调用。总之,继承方法搜索的路径是先从左到右,在选定了一个BaseClass之后,将会一直沿着该BaseClass的继承结构进行搜索,直至最顶端,然后再到另外一个一个BaseClass。
         就先说着这么多了,对于Python中OO的特性将会在以后的Post中有进一步的讲述。

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

分享到:
评论

相关推荐

    python中class的定义及使用教程

    在Python中,定义一个类使用关键字`class`,后面跟上类名以及括号内可能包含的父类名。类可以包含三个主要部分:类的名称、类的属性和类的方法。 类的名称即为类名,用来标识类。类的属性是对象的特征,可以理解为...

    Python中Class类用法实例分析

    本文实例讲述了Python中Class类用法。分享给大家供大家参考,具体如下: 尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦。因此我们关注Python在FP上的...

    Python class

    python中的class很有用 我的编程可以共享

    对Python中class和instance以及self的用法详解

    在Python编程语言中,面向对象编程是一种重要的编程范式,其中,类(class)和实例(instance)是核心概念,而self则是用于引用实例自身的特殊参数。本文将深入讲解Python中class、instance以及self的用法。 一、...

    python实现的简单的class解析以及简单执行class.zip

    在本主题中,我们将探讨如何使用Python来解析Java的Class文件,并对其进行简单的执行。这是一项有趣的技术,可以帮助我们理解Java字节码的工作原理,同时也可以在Python环境中运行Java代码。 首先,Java的Class文件...

    对python 中class与变量的使用方法详解

    ### Python中的Class与变量使用详解 在Python编程中,理解和掌握`class`及变量的使用是十分重要的。本文将从不同角度深入解析Python中的变量类型(包括全局变量、局部变量、对象变量、类变量等)及其作用域,并通过...

    对Python Class之间函数的调用关系详解

    假设有Class A 和 Class B两个类,Class A中定义了a(),Class B中定义了b(). 现在我想在Class B中调用 Class A中的函数a()。此处介绍三种调用方法: 方法一: 在Class B中所定义的fuction()中声明Class A的对象a,...

    Python中实例化class的执行顺序示例详解

    在Python编程语言中,实例化一个`class`的过程涉及到一系列的步骤,这些步骤对于理解类的行为至关重要。在本文中,我们将深入探讨Python实例化class的执行顺序,通过示例进行详细解析。 首先,当我们创建一个类,如...

    python中metaclass原理与用法详解

    本文实例讲述了python中metaclass原理与用法。分享给大家供大家参考,具体如下: 什么是 metaclass. metaclass (元类)就是用来创建类的类。在前面一篇文章《python动态创建类》里我们提到过,可以用如下的一个观点来...

    Python-EveryClass数据收集模块

    总的来说,"Python-EveryClass数据收集模块"涵盖了Python开发中数据采集的多个核心环节,结合了网络爬虫技术、数据库操作、API调用以及数据处理等,是一个综合性强的工具,对于理解和学习数据采集有着极高的参考价值...

    07-python-Cython 语法-class 和 cdef class,使用 C++-Typed memoryviews

    在Python中,我们通常使用"class"关键字定义类。Cython也支持这种语法,但为了让代码更接近C/C++,它引入了"cdef class"。普通的"class"定义的类仍然是完全的Python对象,而"cdef class"定义的类是半编译的,可以...

    python3.10中文使用手册

    * 保留的标识符类:Python 中的一些标识符是保留的,例如 `__class__`、`__module__` 等。 字面值 Python 中的字面值是指一些预定义的值,如数字、字符串、字节串等。 * 字符串与字节串字面值:Python 中的字符串...

    Python库 | ExtensionClass-2.12.0.zip

    资源分类:Python库 所属语言:Python 资源全名:ExtensionClass-2.12.0.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python Excel Class

    python 操作MS office Excel 的类。 可以实现对excel中的数据赋值,取值,画图等相关功能。

    Python库 | dataclass_wizard-0.4.1-py2.py3-none-any.whl

    在Python 3.7及以上版本中,内建的`dataclasses`模块允许开发者快速创建带有默认值和验证的数据类,而"dataclass_wizard"在此基础上进一步扩展了这些特性。 在Python编程中,数据类(data classes)是通过使用`@...

    python google class 整理成pdf文档

    python google class 整理成pdf文档,视频可到youku查找。

Global site tag (gtag.js) - Google Analytics