11#Python基础08 面向对象的基本概念
22
3- Python使用类( class) 和对象( object) ,进行面向对象(object-oriented programming,简称OOP)的编程。
3+ Python使用类( class) 和对象( object) ,进行面向对象(object-oriented programming,简称OOP)的编程。
44
55面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。
66
@@ -12,26 +12,36 @@ Python使用类(class)和对象(object),进行面向对象(object-oriented p
1212
1313面向对象就是模拟了以上人类认知过程。在Python语言,为了听起来酷,我们把上面说的“东西”称为对象(object)。
1414
15- 先定义鸟类
15+ 先定义鸟类:
16+
1617``` python
1718class Bird (object ):
1819 have_feather = True
1920 way_of_reproduction = ' egg'
2021```
21- 我们定义了一个类别(class),就是鸟(` Bird ` )。在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(` have_feather ` ),一个是生殖方式(` way_of_reproduction ` ),这两个变量对应我们刚才说的属性(attribute)。我们暂时先不说明括号以及其中的内容,记为问题1。
22+
23+ 我们定义了一个类别(class),就是鸟(` Bird ` )。
24+
25+ 在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(` have_feather ` ),一个是生殖方式(` way_of_reproduction ` ),这两个变量对应我们刚才说的属性(attribute)。
26+
27+ 我们暂时先不说明括号以及其中的内容,记为问题1。
2228
2329假设我养了一只小鸡,叫` summer ` 。它是个对象,且属于鸟类。使用前面定义的类:
30+
2431``` python
2532summer = Bird()
2633print summer.way_of_reproduction
2734```
35+
2836通过第一句创建对象,并说明` summer ` 是类别鸟中的一个对象,` summer ` 就有了鸟的类属性,对属性的引用是通过 对象.属性(` object.attribute ` ) 的形式实现的。
2937
3038可怜的` summer ` ,你就是个有毛产的蛋货,好不精致。
3139
3240##动作
3341
34- 日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。
42+ 日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。
43+
44+ 比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。
3545
3646这样的一些“行为”属性为方法(method)。Python中通过在类的内部定义函数,来说明方法。
3747
@@ -40,19 +50,20 @@ class Bird(object):
4050 have_feather = True
4151 way_of_reproduction = ' egg'
4252 def move (self , dx , dy ):
43- position = [0 ,0 ]
53+ position = [0 , 0 ]
4454 position[0 ] = position[0 ] + dx
4555 position[1 ] = position[1 ] + dy
4656 return position
4757
4858summer = Bird()
49- print ' after move:' ,summer.move(5 ,8 )
59+ print ' after move:' , summer.move(5 , 8 )
5060```
51- 我们重新定义了鸟这个类别。鸟新增一个方法属性,就是表示移动的方法` move ` 。(我承认这个方法很傻,你可以在看过下一讲之后定义个有趣些的方法)
61+
62+ 我们重新定义了鸟这个类别。鸟新增一个方法属性,就是表示移动的方法` move ` 。(我承认这个方法很傻,你可以在看过下一讲之后定义个有趣些的方法。)
5263
5364(它的参数中有一个` self ` ,它是为了方便我们引用对象自身。方法的第一个参数必须是` self ` ,无论是否用到。有关` self ` 的内容会在下一讲展开)
5465
55- 另外两个参数,` dx ` , ` dy ` 表示在` x ` 、` y ` 两个方向移动的距离。` move ` 方法会最终返回运算过的` position ` 。
66+ 另外两个参数,` dx ` 、 ` dy ` 表示在` x ` 、` y ` 两个方向移动的距离。` move ` 方法会最终返回运算过的` position ` 。
5667
5768在最后调用` move ` 方法的时候,我们只传递了` dx ` 和` dy ` 两个参数,不需要传递` self ` 参数(因为` self ` 只是为了内部使用)。
5869
@@ -64,7 +75,7 @@ print 'after move:',summer.move(5,8)
6475
6576比如说,鸟类可以进一步分成鸡,大雁,黄鹂。
6677
67- 在OOP中,我们通过继承( inheritance) 来表达上述概念。
78+ 在OOP中,我们通过继承( inheritance) 来表达上述概念。
6879
6980``` python
7081class Chicken (Bird ):
@@ -77,38 +88,37 @@ class Oriole(Bird):
7788
7889summer = Chicken()
7990print summer.have_feather
80- print summer.move(5 ,8 )
91+ print summer.move(5 , 8 )
8192```
82- 新定义的鸡(` Chicken ` )类的,增加了两个属性:移动方式(` way_of_move ` ),可能在KFC找到(` possible_in_KFC ` )
8393
84- 在类定义时,括号里为了 ` Bird ` 。这说明, ` Chicken ` 是属于鸟类( ` Bird ` )的一个子类,即 ` Chicken ` 继承自 ` Bird ` 。自然而然, ` Bird ` 就是 ` Chicken ` 的父类。 ` Chicken ` 将享有 ` Bird ` 的所有属性。尽管我只声明了 ` summer ` 是鸡类,它通过继承享有了父类的属性(无论是变量属性 ` have_feather ` 还是方法属性 ` move ` )
94+ 新定义的鸡( ` Chicken ` )类的,增加了两个属性:移动方式( ` way_of_move ` ),可能在KFC找到( ` possible_in_KFC ` )。
8595
86-
96+ 在类定义时,括号里为了 ` Bird ` 。这说明, ` Chicken ` 是属于鸟类( ` Bird ` )的一个子类,即 ` Chicken ` 继承自 ` Bird ` 。自然, ` Bird ` 就是 ` Chicken ` 的父类。 ` Chicken ` 将享有 ` Bird ` 的所有属性。
8797
88- 新定义的黄鹂( ` Oriole ` )类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。
98+ 尽管我只声明了 ` summer ` 是鸡类,它通过继承享有了父类的属性。(无论是变量属性 ` have_feather ` 还是方法属性 ` move ` )
8999
90-
100+ 新定义的黄鹂( ` Oriole ` )类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。
91101
92- 通过继承制度,我们可以减少程序中的重复信息和重复语句。如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。
102+ 通过继承制度,我们可以减少程序中的重复信息和重复语句。
93103
94- (回到问题1, 括号中的 ` object ` ,当括号中为 ` object ` 时,说明这个类没有父类(到头了))
104+ 如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。
95105
96-
106+ (回到问题1:括号中的 ` object ` ,当括号中为 ` object ` 时,说明这个类没有父类(到头了))
97107
98- 将各种各样的东西分类,从而了解世界, 从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。所谓面向过程 ,也就是执行完一个语句再执行下一个,更多的是机器思维。通过面向对象的编程,我们可以更方便的表达思维中的复杂想法 。
108+ 将各种各样的东西分类,从而了解世界。 从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。而所谓面向过程 ,也就是执行完一个语句再执行下一个,更多的是机器思维。
99109
100-
110+ 通过面向对象的编程,我们可以更方便的表达思维中的复杂想法。
101111
102112##总结
103113
104- 将东西根据属性归类 ( 将object归为class )
114+ 将东西根据属性归类( 将object归为class)
105115
106- 方法是一种属性,表示动作
116+ 方法是一种属性,表示动作。
107117
108118用继承来说明父类-子类关系。子类自动具有父类的所有属性。
109119
110120` self ` 代表了根据类定义而创建的对象。
111121
112- 建立对一个对象: 对象名 = 类名()
122+ 建立对一个对象:对象名 = 类名()
113123
114- 引用对象的属性: ` object.attribute `
124+ 引用对象的属性:` object.attribute `
0 commit comments