forked from misakar/pythonCookbook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
oop.txt
68 lines (48 loc) · 3.43 KB
/
oop.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
OOP -- 面向对象编程
面向对象编程是一个很重要的概念,对python尤其如此,面向对象使python变得简单,但也使python变的抽象。这篇文章
将重点介绍面向对象的基本概念,以及python的实现
1.什么是面向对象?
我的理解,面向对象就是用计算机程序模拟自然社会:),说的高大上了一点,但相比与面向过程,oop更符合人类的思维而
不是计算机。比如说鸟类,是的,这就是一个[类],那么一个鸟呢,就是这个类的一个[实例]。所有的鸟类都会唱歌,
百灵鸟也会,这叫[继承],唱歌这种行为就是一个[方法]。但百灵鸟的歌声显然更动听,这叫[重写],因为重写,所以唱歌
这种方法具有[多态]。鸟类还有很多[属性]:)下面我会用代码实现一个鸟类,和一个百灵鸟类:
class Bird:
"""鸟类"""
def __init__(self, feather:str, wing:str):
self.feather = feather # 鸟类有羽毛
self.wing = wing # 鸟类有翅膀
def __eat__():
print("IWant to eat!!") # 鸟类有吃这种行为
def __sing__():
print("lalalaa I like sing!") # 鸟类有唱歌这种行为
def __repr__():
print('Bird instance: {0!r}.format(self)') # 一个鸟类实例的表示
鸟类诞生啦!(我不是造物主!)
我还会创造一只鸟:)
bird = Bird('feather', 'wing') # bird就是一只可爱的小鸟啦
bird.eat() # I What to eat!!
大自然是多彩多样的,光有这个鸟类还不够,我要创建一个新的鸟类--百灵鸟类。当然百灵鸟类拥有鸟类的许多特性,那就
继承吧!
class Lark(Bird): # 注意()中的继承
"""百灵鸟类"""
# 百灵鸟有更动听的歌声,所以我要重写sing方法
def __sing__():
super(Lark, self).__sing__()
print("my voice is dadadadadadada") # 继承了父类的方法,重写了父类的方法
lark = Lark('feather', 'wing') # 一只百灵鸟诞生了
接下来我会具体介绍面向对象的重要概念:继承 多态 封装 抽象
2.继承
继承,顾名思义,就是拥有父类的属性和方法。继承是增加代码重用性的一个绝佳方法,正如其上代码所示,只需在类定义时
,在()中指明继承的父类(超类)即可(注意:子类继承的只是父类的公有属性和方法)。并可通过super(type, cls or type)引用父类的方法。
然而继承也会带来苦恼,这就是多继承的时候,多继承的父类引用最好绑定父类的类名,以避免混淆:A.__init__(self)。
3.封装
封装,就是向使用者隐藏代码的实现细节,只暴露特定的方法操作给用户,这些方法操作就是接口。封装的意义在于降低了
代码的使用成本,使多人协作成为可能。比如你想开车,但你没必要知道内燃机的原理是什么,开车成本大大降低。
从不变的角度看:封装可以使我们专注与操作而不是代码的实现细节。
从变化的角度看:封装可以使代码的实现者勇于实现新技术,反正对使用者的操作都是一样的:)
我们实现类的时候运用的就是封装的思想。
4.多态与接口
多态:对同一调用消息调用各自类的方法
接口:暴露给代码使用者的操作集合
5.抽象
其实我们一直在抽,记住抽象不是复杂,而是尽可能的使代码变得简单