python 面向对象编程

1、面向对象VS面向过程

1.1 面向过程

面向过程就是明确要实现的目标后,先分析实现这一目标的步骤,再用函数将这些步骤逐一实现,而后根据实现步骤,依次调用这些函数。面向过程的优势是程序的性能比面向对象高;缺点是没有面向对象易复用、易维护、易扩展。python

1.2 面向对象

面向对象是一种为了解决面向过程的不足、而且在面向过程的基础上发展起来的思惟方式。按照面向对象的思惟进行编程,在明确目标后,首先分析这个目标世界都由哪些对象构成,以及实现这一目标的步骤,再根据实现步骤,考虑对象的属性和方法,并经过编程予以实现,而后经过对象调用这些方法实现目标。与面向过程相比,两者的优劣点正好相反。编程

1.3 对比

面向过程与面向对象是两种不一样类型的思惟方式。面向过程的思惟是一种工程师思惟,将给定的目标理解为待解决的问题,因而工做思路是找方法,对方法进行分解,而后一步步实现。而面向对象的思惟是一种导演思惟,将给定的目标理解为一个待编导的剧本,了解剧情后,导演首先考虑的是这个故事须要安排多少角色,而后角色与角色之间发生联系,推进故事情节的发展。函数

面向过程与面向对象不是两种对立的编程思想,而是一种编程思想上的承接。面向对象包含了面向过程的思惟方式,两者的差别在于面向对象在面向过程的基础上增长了演员,也就是行动的主体。性能

2、面向对象的基本概念

2.1 类

类是一个抽象的概念,能够将类理解为可以建立对象的模板。spa

2.2 对象

基于类建立的对象都具备相同的性质和行为,而后可根据须要赋予每一个对象独特的个性。根据类来建立对象被称为实例化。code

2.3 属性和方法

属性是指类具备的特性,在类中属性表现为变量;方法是指类具备的功能,方法表现为函数。对象

3、类的建立和使用

3.1 建立类

在python中,使用'class+类名():'的方式定义类。class是关键字,类名采用驼峰命名法,类名后面带有一个小括号,小括号内能够包含参数,表示继承关系,没有参数的话,表示继承自object类(object类是最高级别的类)。类中能够没有任何内容,只包含一个pass关键字。继承

3.2 类的成员

类的成员主要包括类属性(类属性、实例属性)、方法(普通方法、类方法、静态方法)。类的__dict__属性中存储了类的内置属性、类属性、类方法,对象的__dict__属性中存储了一些已赋值的类属性和对象属性。it

3.3 属性的建立及访问

实例属性:实例属性最好在__init__(self,…)中初始化,内部(实例属性命名空间的内部)访问时前面都须要加上self.,外部访问时用'对象名.实例属性名'的形式。模板

类属性:在__init__()外初始化,内部(类属性命名空间的内部)经过'类名.类属性名'调用,外部既能够经过'类名.类属性名'调用,又能够经过'对象名.类属性名'来调用。

3.4 方法的定义及调用

普通方法 以'def fun_name(self,…):'的形式定义,在类的外部经过'对象.方法名'调用。 类方法 类方法定义时使用@classmethod来装饰,函数必须传入cls参数,而且用此来调用类属性,'cls.类属性名'。类方法能够经过类或者实例来调用,单不可以访问实例属性。

class Dog():    # 类定义使用class关键字;类命名才用驼峰命名法;类名后面跟小括号,小括号内能够包含参数,表示继承关系,没有参数的话,表示继承自object类(object类是最高级别的类)
    leg_num = 4    # 类属性,把同类都同样的属性做为类属性

    def __init__(self, name, age):  # 类方法,__init__()是一个特殊的类方法,用于Dog类建立实例时,对对象进行初始化。
        self.name = name    # 实例属性
        self.age = age
    def run(self):  # 类方法,self形参用于接收Dog类建立的实力对象。
        print(self.name.title() + ' is running....')    # 使用句点法访问对象

my_dog = Dog('xiaotian',6)   # Dog类建立实例对象my_dog时,使用实参'xiaotian'和6调用__init__()函数
my_dog.run()    # 使用句点法调用对象

四 面向对象的特色

4.1 封装

隐藏属性和方法的实现细节,仅对外提供访问方式,经过必定规则约定属性和方法访问权限。

  • 普通名字,public
  • 以_前导名字,从语法上视为public,但约定俗称的意思是“能够被访问,但请视为private,不要随意访问”
  • 以__前导,以__后缀名字,特殊属性,public
  • 以__前导,不以__后缀名字,private

4.2 继承

编写类时,并不是老是要从空白开始。若是你要编写的类是另外一个现成类的特殊版本,可以使用继承。。一个类继承另外一个类时,它将自动得到另外一个类的全部属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的全部属性和方法,同时还能够定义本身的属性和方法。private的成员不能为子类继承。

4.3 多态

多态就是子类能够改写父类的方法,进而能够实现同一父类、不一样子类的对象调用相同的方法,能够实现不一样的功能。

五 模块与类的导入

Python容许用户将类存储在模块中(即.py的文件中),而后在须要的时候,从存储类的模块中导入到当前模块。若是存储类的模块与当前模块在同一路径下,那么能够直接导入存储类的模块。若是不在同一个路径下,须要使用sys.path确认一下存储类的模块是否在path列表中。 

相关文章
相关标签/搜索