面向对象的三大特性
封装、继承、多态 是面向对象的3大特性
一、封装
好处
- 在使用面向过程编程时,当需要对数据处理时,需要考虑用哪个模板中哪个函数来进行操作,但是当用面向对象编程时,因为已经将数据存储到了这个独立的空间中,这个独立的空间(即对象)中通过一个特殊的变量(class)能够获取到类(模板),而且这个类中的方法是有一定数量的,与此类无关的将不会出现在本类中,因此需要对数据处理时,可以很快速的定位到需要的方法是谁 这样更方便
- 全局变量是只能有1份的,多很多个函数需要多个备份时,往往需要利用其它的变量来进行储存;而通过封装 会将用来存储数据的这个变量 变为了对象中的一个“全局”变量,只要对象不一样那么这个变量就可以再有1份,所以这样更方便
- 代码划分更清晰
面向过程
全局变量1
全局变量2
全局变量3
...
def 函数1():
pass
def 函数2():
pass
def 函数3():
pass
def 函数4():
pass
def 函数5():
pass
面向对象
class 类(object):
属性1
属性2
def 方法1(self):
pass
def 方法2(self):
pass
class 类2(object):
属性3
def 方法3(self):
pass
def 方法4(self):
pass
def 方法5(self):
pass
二、继承
说明
- 能够提升代码的重用率,即开发一个类,可以在多个子功能中直接使用
- 继承能够有效的进行代码的管理,当某个类有问题只要修改这个类就行,而其继承这个类的子类往往不需要就修改
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def show_message(self):
print("%s的年龄为%d" % (self.name, self.age))
class Student(People):
pass
if __name__ == '__main__':
s1 = Student("summer", 20)
s1.show_message()
三、多态
# -*- coding: utf-8 -*-
class Animal:
def call(self):
print("汪汪汪")
class Cat(Animal):
def call(self):
print("喵喵喵")
class Dog(Animal):
pass
class Bird(Animal):
def call(self):
print("唧唧唧")
if __name__ == '__main__':
cat = Cat()
bird = Bird()
dog = Dog()
cat.call()
bird.call()
dog.call()
运行结果:
喵喵喵
唧唧唧
汪汪汪
上面代码中,基类为Animal,由此创建出三个子类:Cat、Dog、Bird。其中Animal类中已经定义了call函数,Dog直接继承了这个函数,而Cat和Bird中重写了call函数。这样的做法就叫做多态,即一个函数可以在不同的实例中通过重写实现多样的类似功能。