python面向对象编程
面向对象程序设计具有三大基本特征:封装、继承、多态。
- 封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装思想。
- 在Python中,继承是实现重复利用的重要手段,子类通过继承复用了父类的属性和行为的同时,又添加了子类特有的属性和行为。
- 多态是将父类对象应用于子类的特征
(面向过程只考虑在函数中封装代码逻辑,而不考虑函数的归属关系)
(面向对象是一个更大的封装,根据对象职责明确函数的归属关系)
类的定义与使用
- 类的定义
class Fridge():
def open(self):
print('打开冰箱门')
def pack(self, goods):
self.goods = goods
print('把%s装进冰箱' % self.goods)
def close(self):
print('关门')
- 类的使用
fridgel = Fridge()
- 属性
类的属性存储了类的各种数据,定义位置有类的内部和方法的外部,由该类所有的对象共同拥有。类属性可以通过类名访问,也可以通过对象名访问,但只能通过类名修改
在开发过程中经常会遇到不想让对象的某些属性不被外界访问和随意修改的情况,这时可将这些属性定义为私有属性,再添加一个公有方法,用于私有属性的操作。私有属性定义以“__”开头,如__age。
- 构造方法
在类的方法中,有两种特殊方法,分别在类创建时和销毁时自动调用,分别是构造方法__init__()和析构方法__del__()。
init()方法的第一个参数是self,即代表对象本身,不需要显式传递实参。但是在创建类时传入的参数实际上都传递给了__init__()方法。
class Fridge():
No = 0
Num = 0
# 自定义构造方法
def __init__(self):
Fridge.No + = 1
- 对象方法
对象方法是在类中定义的,以关键字self作为第一个参数。在对象方法中可以使用self关键字定义和访问对象属性,同时对象属性会覆盖类属性。
继承
子类不能继承父类的私有属性和方法,但能自动拥有父类其他的属性和方法。如果子类对父类提供的属性和方法进行修改,叫重写。如果子类重新定义了父类方法后,还需要访问父类的同名方法,可以使用super关键字
class Fridge():
def __init__(self):
print('这是一个冰箱')
def open(self):
print('打开冰箱门')
def pack(self, goods):
self.goods = goods
print('把%s装进冰箱' % self.goods)
def close(self):
print('关门')
class Double_Door(Fridge):
def __init__(self): #重写父类方法
super().__init__() #super调用父类方法
print('这个是双开门冰箱')
fridge = Double_Door()
fridge.pack('大象') #继承父类方法
结果:
这是一个冰箱
这个是双开门冰箱
把大象装进冰箱