python面向对象开发详解
说到面向对象的开发思想,python同其他语言一样 都有封装,继承,多态的特点。
本文详细介绍python下的面向对象开发思想的应用
面向过程开发的简单案例
面向过程开发中,只是把每一个功能封装成函数,没有实现对函数的封装,代码复用率低,但运行效率高于面向对象,现在大多数开发采用面向对象开发,减少了代码量,我们只需要面向对象进行开发,不用对执行过程开发,能更好的实现我们的需求。
# 面向过程
def add_user():
pass
def del_user():
pass
def modify_user():
pass
def query_user():
pass
def show_all():
pass
# 每个功能是一个函数 方法
def main():
while True:
print(
'''----------------------------------------
名片管理系统 V2.0
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有的名片
6:退出系统
---------------------------------------------------
'''
)
operator = input('请输入需要执行的操作(数字即可)')
if operator == '1':
add_user()
elif operator == '2':
del_user()
elif operator == '3':
modify_user()
elif operator == '4':
query_user()
elif operator == '5':
show_all()
elif operator == '6':
break
main()
面向对象的三个特征
封装 :函数是对语句的封装 类是对函数和变量的封装
继承:类和类之间 可以手动建立父子关系 父类的属性和方法 字类也可以使用 父类也称为基类
多态: 是一种技巧 可以提升代码的灵活度
封装
将函数(方法)封装到类里面
class Person:
# 规定人的一些属性
def __init__(self,name,age,height): # __init__(self,属性名1,[属性名2])定义属性
self.name = name # 属性值 self.属性=属性值
self.age = age
self.height = height
# 定义方法
def eat(self):
print(self.name,'eat')
def run(self):
print(self.name,'run')
继承
python中的类可以继承 一个类可以继承多个类
继承单个类
创建父类Animal 由Dog,Student,Cat继承父类
继承后有父类的属性和方法 私有属性和方法不可继承
class Animal(object):
def __init__(self,name,age):
self.name = name
self.age = age
def sleep(self):
print(self.name+'正在睡觉')
def eat(self):
print('eat')
class Dog(Animal): # 继承Animal
def bark(self):
print(self.name+'正在狂吠')
class Students(Animal):
def study(self):
print(self.name+'正在学习')
class Cat(Animal):
def eat_fish(self):
print(self.name+'正在吃鱼')
继承多个类
## 继承多个类
class A(object):
def demo_x(self):
print('我是A类中的demo——x')
def foo(self):
print('我是A类的foo方法')
class B(object):
def demo_y(self):
print('我是B类中的demo_y')
def foo(self):
print('我是B中的foo')
class C(A,B):
pass
c= C()
c.demo_x()
c.demo_y()
c.foo() # 当两个类中都有同一个方法 默认前一个方法
print(C.__mro__) # 查看C类中的调用方法顺序 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
多态
多态是对继承父类的子类进行重写方法和属性 可以理解为是继承+重构
子类重写父类的方法
在子类添加方法可以直接在子类中定义方法 需要重写父类的方法也是直接在子类中定义新方法 当调用方法时 首先调用子类中的方法 如果没有才调用父类的方法
有两种方法:
添加school,diver属性
在父类 name age 基础上 又增加了自己新的内容
-
def __init__(self,name,age,school,diver): Person.__init__(self,name,age) #第一种 self.school = school self.diver = diver
-
# 1.调用父类的方法名 父类名.方法名(self,参数列表) # 2.Person.__init__(self,name,age,新内容) # 使用super 直接调用父类的方法 推荐这种 def __init__(self,name,age,school,diver): super(Student, self).__init__(name,age) # 第二种 self.school = school self.diver = diver