面向对象编程思想的发展历史

引言

提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)和封装(Encapsulation)。Python也是一种支持OOP的动态语言,本文将简单阐述Python对面向对象的支持。

在讨论Python的OOP之前,先看几个OOP术语的定义:

 类:对具有相同数据和方法的一组对象的描述或定义。  对象:对象是一个类的实例。

 实例(instance):一个对象的实例化实现。

 标识(identity):每个对象的实例都需要一个可以唯一标识这个实例的标记。  实例属性(instance attribute):一个对象就是一组属性的集合。

实例方法(instance method):所有存取或者更新对象某个实例一条或者多条属性的函数的集合。

 类属性(classattribute):属于一个类中所有对象的属性,不会只在某个实例上发生变化

 类方法(classmethod):那些无须特定的对性实例就能够工作的从属于类的函数

1.Python中的类与对象

Python中定义类的方式比较简单: 

class 类名:  类变量

      def __init__(self,paramers):

      def 函数(self,...)

其中直接定义在类体中的变量叫类变量,而在类的方法中定义的变量叫实例变量。类的属性包括成员变量和方法,其中方法的定义和普通函数的定义非常类似,但方法必须以self作为第一个参数。

举例:

class MyFirstTestClass:

      classSpec="itis a test class"  def__init__(self,word):  

      print"say "+word  

     defhello(self,name):   

     print"hello "+name

在Python类中定义的方法通常有三种:实例方法,类方法以及静态方法。这三者之间的区别是实例方法一般都以self作为第一个参数,必须和具体的对象实例进行绑定才能访问,而类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod;而静态方法不需要默认的任何参数,跟一般的普通函数类似.定义的时候使用@staticmethod。

封装和访问控制

与Java不同,Python的访问控制相对简单,没有public,private,protected等属性,python认为用户在访问对象的属性的时候是明确自己在做什么的,因此认为私有数据不是必须的,但是如果你必须实现数据隐藏,也是可以的,具体方法就是在变量名前加双下划线。如__privatedata=0,定义私有方法则是在方法名称前加上__下划线。但即使对于隐藏的数据,也是有一定的方法可以访问的。方法就是__className__attrName。Python对于私有变

量会进行Namemangling是Python中为了方便定义私有的变量和方法,防止和继承类以及其他外部的变量或者方法冲突而采取的一种机制。在python中通过__spam定义的私有变量为最终被翻译成_classname__spam,其中classname为类名,当类名是以_开头的时候则不会发生Namemangling。Namemangling 存在的一个问题是当字符串长度超过255的时候则会发生截断。

3. Python中的继承

继承

Python同时支持单继承与多继承,继承的基本语法为class新类名(父类1,父类2,..),当只有一个父类时为单继承,当存在多个父类时为多继承。子类会继承父类的所有的属性和方法,子类也可以覆盖父类同名的变量和方法。在传统类中,如果子类和父类中同名的方法或者属性,在查找的时候基本遵循自左到右,深度优先的原则。如下列:

>>>class A:

      defsayhi(self): 

      print'I am A hi' 

>>>class B:

      defsayhi(self): 

      print'I am B Hi'

>>>class C(A,B): 

      pass 

>>>d=C()

>>>d.sayhi()

      Iam A hi

>>>B.sayhi(d) 

      Iam B Hi

你可能感兴趣的:(面向对象编程思想的发展历史)