面向对象
python是一种面向对象的语言,何为面向对象,下面是百度百科里面针对面向对象编程的解释:
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
面向对象的三大特点:
- 封装
封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本的目标。对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底了解清楚的,用户只需要通过封装外的通道对计算机进行相关方面的操作即可。大大地简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。
- 继承
继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。如果按照继承源进行划分,则可以分为单继承(一个对象仅仅从另外一个对象中继承其相应的特点)与多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象);如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承(一个对象在继承另一个对象的能力与特点之后将父对象进行取代)、包含继承(一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)、受限继承、特化继承。
- 多态
从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态;从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。
类、对象、属性、方法
-
类
类可以理解是一个模板,通过它可以创建出无数个具体实例。class Car: pass
如上Car就是一个类,在python中定义一个类一般都是class+类名(一般采用驼峰命名法)
-
对象
类并不能直接使用,通过类创建出的实例(又称对象)才能使用。class Car: pass car=Car()
这里面的car就是一个对象
-
属性
类中的所有变量称为属性class Car: country = '中国' _color='blue'
如上country和color都是属性,属性前面加上_或者__又被称为私有属性,顾名思义就自己是独有的,不能被外界访问到,实际使用过程中封装完整的类里面的私有属性可以通过添加property装饰器来实现外界访问,这个后续会做详细介绍
-
方法
类中的所有函数通常称为方法。class Car: country = '中国' def __init__(self, name, age): self.name = name self.age = age def test(self): print(self.country) @classmethod def test1(cls): print(cls.country) @staticmethod def test2(): pass
方法有可以大致分为三类:实例方法(test),类方法(test1),静态方法(test2)
特点:
实例方法主要标识是有最少包含一个参数self,实例方法前面加上__就变成了私有方法;
类方法主要标识就是有装饰器@classmethod以及最少包含一个参数cls;
静态方法主要标识是有装饰器@staticmethod.
区别:
实例方法是通过self.属性来调用类属性;
类方法是通过cls.属性来调用类属性;
静态方法无法调用类属性.