面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用;
类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中);
对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数;
面向对象三大特性:封装、继承和多态。
数据封装
数据的封装,其实就是定义一些函数,来实现特定的功能,类的实例调用对应的方法就可以实现对应的功能,不需要关注函数的具体实现和数据的具体传递。
继承
OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。继承的作用就是子类可以继承到父类的所有功能。也可以重写对应的功能。
多态
多态的概念其实是在继承,重写的应用,我们可以通过继承派生出不同的子类,重写子类的具体实现,在调用时用他们的共同基类做参数,这样基类派生出的各种子类都可以传递进去,系统会根据传入的具体类型实现具体的功能。
面向对象与面向过程的比较
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程编程——面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
#面向对象
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def print_age(self):
print('%s: %s' % (self.name, self.age))
bart = Student('张三', 15)
lisa = Student('李四', 16)
bart.print_age()
lisa.print_age()
#面向过程
def print_age(std):
print('%s: %s' % (std['name'], std['age']))
std1 = { 'name': '张三', 'age': 17 }
std2 = { 'name': '李四', 'age': 18 }
print_age(std1)
print_age(std2)