面向过程就是明确要实现的目标后,先分析实现这一目标的步骤,再用函数将这些步骤逐一实现,而后根据实现步骤,依次调用这些函数。面向过程的优势是程序的性能比面向对象高;缺点是没有面向对象易复用、易维护、易扩展。python
面向对象是一种为了解决面向过程的不足、而且在面向过程的基础上发展起来的思惟方式。按照面向对象的思惟进行编程,在明确目标后,首先分析这个目标世界都由哪些对象构成,以及实现这一目标的步骤,再根据实现步骤,考虑对象的属性和方法,并经过编程予以实现,而后经过对象调用这些方法实现目标。与面向过程相比,两者的优劣点正好相反。编程
面向过程与面向对象是两种不一样类型的思惟方式。面向过程的思惟是一种工程师思惟,将给定的目标理解为待解决的问题,因而工做思路是找方法,对方法进行分解,而后一步步实现。而面向对象的思惟是一种导演思惟,将给定的目标理解为一个待编导的剧本,了解剧情后,导演首先考虑的是这个故事须要安排多少角色,而后角色与角色之间发生联系,推进故事情节的发展。函数
面向过程与面向对象不是两种对立的编程思想,而是一种编程思想上的承接。面向对象包含了面向过程的思惟方式,两者的差别在于面向对象在面向过程的基础上增长了演员,也就是行动的主体。性能
类是一个抽象的概念,能够将类理解为可以建立对象的模板。spa
基于类建立的对象都具备相同的性质和行为,而后可根据须要赋予每一个对象独特的个性。根据类来建立对象被称为实例化。code
属性是指类具备的特性,在类中属性表现为变量;方法是指类具备的功能,方法表现为函数。对象
在python中,使用'class+类名():'的方式定义类。class是关键字,类名采用驼峰命名法,类名后面带有一个小括号,小括号内能够包含参数,表示继承关系,没有参数的话,表示继承自object类(object类是最高级别的类)。类中能够没有任何内容,只包含一个pass关键字。继承
类的成员主要包括类属性(类属性、实例属性)、方法(普通方法、类方法、静态方法)。类的__dict__属性中存储了类的内置属性、类属性、类方法,对象的__dict__属性中存储了一些已赋值的类属性和对象属性。it
实例属性:实例属性最好在__init__(self,…)中初始化,内部(实例属性命名空间的内部)访问时前面都须要加上self.,外部访问时用'对象名.实例属性名'的形式。模板
类属性:在__init__()外初始化,内部(类属性命名空间的内部)经过'类名.类属性名'调用,外部既能够经过'类名.类属性名'调用,又能够经过'对象名.类属性名'来调用。
普通方法 以'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() # 使用句点法调用对象
隐藏属性和方法的实现细节,仅对外提供访问方式,经过必定规则约定属性和方法访问权限。
编写类时,并不是老是要从空白开始。若是你要编写的类是另外一个现成类的特殊版本,可以使用继承。。一个类继承另外一个类时,它将自动得到另外一个类的全部属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的全部属性和方法,同时还能够定义本身的属性和方法。private的成员不能为子类继承。
多态就是子类能够改写父类的方法,进而能够实现同一父类、不一样子类的对象调用相同的方法,能够实现不一样的功能。
Python容许用户将类存储在模块中(即.py的文件中),而后在须要的时候,从存储类的模块中导入到当前模块。若是存储类的模块与当前模块在同一路径下,那么能够直接导入存储类的模块。若是不在同一个路径下,须要使用sys.path确认一下存储类的模块是否在path列表中。