Python之面向对象:面向对象基础

一、面向过程、面向对象对比
1、面向过程
根据业务逻辑从上到下写垒代码
2、函数式思想
将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
3、面向对象
对函数进行分类和封装
1、2、3一步一步抽象,函数式是走向面向对象的中间步骤
函数式的应用场景 --> 各个函数之间是独立且无共用的数据
面向对象编程的应用场景:各个函数公用一组数据
4、基于并发的编程
Erlang语言提出的并发,
单进程、单线程
多进程、多线程的编程方式
5、一般在Python开发中,全部使用面向对象 或 面向对象和函数式混合使用
 
二、面向对象
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象”来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
1、类:由属性和方法组成
2、属性
3、方法
4、实例化:创建一个类的实例,类的具体对象。
5、对象:根据模板创建的实例,通过实例对象可以执行类中的属性和方法
6、继承:即一个派生类(derived class)继承基类(base class)的字段和方法
7、方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方
法的覆盖(override),也称为方法的重写。
 
三、对象
对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
1、程序中所有东西都是对象;
2、对象具有状态和行为:其中状态保存在一组变量中,行为则通过方法实现。
3、对象的方法一方面把对象的内部变量包裹、保护起来,使得只有对象自己的方法才能操作这些内部变量;另一方面,对象的方法还是对象与外部环境和其他对象交互、通信的接口,外界对象通过这些接口驱动对象执行指定的行为,提供相应的服务。
 
四、类
类描述了同一类对象都具有的数据和行为。
(1)类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
(2)对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
 
1、创建类
(1)
class Foo(object):类名首字母要大写,继承object类
empCount = 0
empCount是一个类属性(也叫静态属性),它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用Employee.empCount访问
def __init__(self,name,age): 构造函数
self.name=name
self.age=age
类的构造方法或初始化方法,只要创建类的实例,就会调用这个方法。如果没显示定义这个方法,默认会给一个空的构造方法。
def bar(self):
self:代表实例本身并且类中所有的方法中都必须有self,并且写在第一个参数位置
obj=Foo() 实例化,函数中的self会自动把实例赋值给self,不需要手动赋值
创建对象,类名称后加括号即可
obj.bar() 执行bar方法
(2)def __inti__(self,*args): 使用了元祖参数,对于变量不确定的情况
if len(args)==2:
self.name=name
self.age=age
else:
print 'no salary'
 
2、创建实例对象
要创建一个类的实例,可以使用类的名称,并通过__init__()方法来接受参数
创建一个类的具体对象。每次从类产生实例时,Python都会自动调用名为__init__的方法,也就是类的构造方法,进行数据初始化。新实例会如往常那样传入__init__的self参数。该方法也会在类中被继承。
 
五、类与对象在内存中的调用关系
1、类与对象在内存中的存储情况
类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份
类:存储属性和方法
对象:存储自己的属性和类对象指针(使用对象中的方法时,去类的内存中找具体的方法)
根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值指向当前对象的类。
当通过 obj1 (实例)执行类中的方法时,过程如下:
根据当前对象中的 类对象指针 找到类中的方法将对象 obj1 当作参数传给 方法的第一个参数 self(实例方法加self的真正目的)
 
原文地址:https://www.cnblogs.com/emily-qin/p/7058747.html