Python-面向对象编程

Python-面向对象编程

一.编程范式


1.面向过程编程

面向过程把函数继续切分为子函数,来降低系统的复杂度。初学者容易接受,从上往下依次执行。


2.面向对象编程(OOP) Object Oriented Programming  对函数进行分类和封装....

面向对象编程——Object Oriented Programming,简称 OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。


3.面向函数编程(lisp)

将某功能的代码封装为一个函数,使用时仅调用函数。

(2+3)*2-1   jian(multi(add(2,3),2),1)


二.基础概念


1.类: 在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)。

OOP首选思考的不是程序的执行流程,而是某个数据类型应该被视为一个对象,这个对象拥有的属性(Property)。



2.object表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。

class people:                         经典类
class People(object):            新式类,object类是所有类的基类/父类


3.实例(Instance)则是一个个具体的 Student;
面向对象的抽象程度又比函数要高,因为一个 Class 既包含数据,又包含操作数据的方法。
- 创建实例的方式:student1 = Student()

- 可以*地给实例变量绑定属性,student1.name,student1.score;


4.构造函数

def __init__(self,name,age):     构造函数,当实例化对象时自动调用


5.属性 self.name = name



6.方法: 给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。

Class 是一种抽象概念,比如我们定义的 Class——Student,是指学生这个概念;


     __init__ 方法的第一个参数永远是 self ,表示创建的实例本身;

- 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self ,并且调用时,不用传递该参数。

- 可定义一个特殊的 __init__ 方法,在创建实例的时候,就把name , score等属性绑上去。


7.析构函数

删除实例化对象时自动调用;

def __del__(self):
        print "deleteing......"    


8.子类

class Student(People):                 Student是子类,继承People这个父类;



注:以上例子见下面数据封装的图示


三.面向对象的三个特性


1.数据封装
封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);
- 访问封装内容的两种方式:
    通过self去访问封装的内容;(self.name)
    通过实例化的对象名去访问封装的内容;

Python-面向对象编程

Python-面向对象编程


练习:

练习1:
创建一个类People,拥有的方法为砍柴,娶媳妇,回家;

实例化对象,执行相应的方法
显示如下:
      老李,18岁,男,开车去娶媳妇
      校思浩,22岁,男,上山去砍柴
      唐浩,10岁,男,辍学回家
属性:name,age,gender
方法:goHome(), kanChai(),quXiFu()

Python-面向对象编程

Python-面向对象编程


Python-面向对象编程




2.继承

继承性:子承父业,继承遗产.对于面向对象的继承来讲,就是将多个类共有的方法提取到父类中去,而子类只需要继承
父类的方法,不需要一一实现每个方法;
1.几个概念:子类(派生类)和父类(基类),经典类和新式类

    class D(object):  新式类

    class D:                   经典类


(1)继承属性的第一种方法,不推荐

    如果父类名更改,此处也需要更改

Python-面向对象编程


(2)继承属性的第一种方法super,推荐

Python-面向对象编程


2.多继承
       - python的类可以继承多个,Java和C#只能单继承;
       - 继承多个类,有两种算法:深度优先算法和广度优先算法;
       - 类为经典类(class C:)时,多继承时使用深度优先算法;
       - 类为新式类(class C(C1,C2))时,多继承时使用广度优先算法;
       eg: D, C(D), B(D), A(B,C)
       深度优先:A->B->D->C
       广度优先: A->B->C->D


3. 注意:类的方法中可以传递一个对象


(1)新式类(优先同级) 优先在C类中找

Python-面向对象编程


(2)新式类(优先同级) 优先在C类中找,C中没有再去D类中找

Python-面向对象编程


(3)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找

Python-面向对象编程


(4)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找,D类没有最后在到同级的C类中找

Python-面向对象编程


3.多态

            就是多种表现形态的意思。它是一种机制、一种能力,而非某个关键字。它在类的继承中得以实现,在类的方法调用中得以体现。多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。

- 如果子类调用的方法,子类没有,父类有,运行父类;
- 如果子类调用的方法,子类有,父类也有,只运行子类的;


Python-面向对象编程



四.将两个子类做关联

Python-面向对象编程

Python-面向对象编程

Python-面向对象编程

Python-面向对象编程


五.访问限制
在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private);

当self.__age变为私有变量,等于_People__age    _People__age = self.__agePython-面向对象编程




      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1962496,如需转载请自行联系原作者