class 类
object 对象
object-oriented programming 面向对象,简称OOP
attribute 属性
method 方法
inheritance 继承
python中通过类和对象来实现 面向对象的编程
面向对象编程,最重要、主要的目的是:提高程序的重复使用性,这和函数的目的类似
python中一切皆对象,类也是对象
1 类是属性相近对象的归类
在人类认知中,会根据属性相近把‘东西’归类,并且给‘类别‘命名
比如鸟类共同属性是有羽毛,通过产卵生育后代。任何一只特别的鸟都是建立在鸟类的原型基础上
面向对象就是模拟了以上人类认知的过程。在python中,上述的‘东西‘称为对象
定义鸟类
- class Bird(object):#类,鸟;类
- have_feather = True#变量,羽毛;属性
- way_of_reproduction = 'egg'#变量,生殖方式;属性
定义类,名字鸟
该‘类别’中定义变量,1是否有羽毛,2生殖方式
这2个变量对应我们之前所说的属性
假如我养了一只小鸡,叫summer。他是个对象,属于鸟类。使用前面定义的类
- summer = Bird()#创建对象,初始化类
- print summer.way_of_reproduction#调用类属性
第一句赋值语句,创建了对象并说明summer是类’鸟’中的一个对象, summer就有了鸟的’类属性'
对属性的引用是通过 对象.属性(object.attribute)的形式来实现
2 类属性可以是变量,也可以是方法(动作)
在人类日常认知中,我们在通过属性识别‘类别‘的时候,有时候会根据这个’东西’能做什么事情来区分类别
比如,鸟类会移动(这样就可以和房屋的类别区分开了)。而这些动作又会带来一定的结果,比如通过移动会带来位置的变化
python中,这样的属性称为方法。python中通过在’类内部定义函数’,来说明方法
- class Bird(object):
- have_feather = True
- way_of_reproduction = 'egg'
- def move(self, dx, dy):#属性,表现:类的函数
- position = [0,0]
- position[0] = position[0] + dx
- position[1] = position[1] + dy
- return position
-
- summer = Bird()
- print 'after move:',summer.move(5,8)#调用类的函数(方法)
类的函数(其实也是类的属性,只不过是一个特殊的属性),被称为类的方法,简称方法
(括号中的object,当括号中为object时,说明这个类没有父类(到头了))
该处,类’鸟‘新增一个属性,即移动(类的函数move)
(函数/方法有一个参数self,是为了方便引用对象自身,函数/方法也是对象),函数/方法的第一个参数必须为self,无论是否用到
另外2个参数,dx dy表示在2个方向移动的距离,move方法会最终返回运算过的position
另外调用move方法时,只传递了dx dy的值,不需要传递self参数(因为slef参数只是为了内部使用)
- class Chicken(Bird):#类,鸡;类;继承基/父类‘鸟’
- way_of_move = ‘walk’#变量,移动方式;属性
- possible_in_KFC = True
-
- class Oriole(Bird):#类,黄鹂;类;继承基/父类‘鸟’
- way_of_move = 'fly'
- possible_in_KFC = False
-
- summer = Chicken()
- print summer.have_feather#调用基/父类属性
- print summer.move(5,8)
通过继承制度,我们可以避免程序中的重复信息和重复语句。(如果我们分别定义两个类,而不继承自鸟类,那么我们就必须把鸟类的属性分别敲到鸡类和黄鹂类的定义中)
所以说,面向对象提高了程序的可重复使用性
我们可以看到,面向对象实际上基于人类认知时的习惯,将各种各样的东西分类,从而了解世界。我们从祖先开始可能已经练习了这个认知过程有几百万年,所以面向对象是很符合人类思维习惯的编程方法。所谓面向过程(也就是执行完一个语句再执行下一个)实际上是机器思维。通过面向对象的编程,我们实际上是更贴近我们自然的思维方式,也更方便和其他人交流我们程序里所包含的想法,甚至于那个人并不是程序员
总结:
将东西根据属性归类 ( 将object归为class )
方法是一种属性,表示动作
用继承来说明父类-子类关系。子类自动具有父类的所有属性。
self代表了根据该类定义而创建的对象。
建立对一个对象: 对象名 = 类名()
引用对象的属性: object.attribute
作者:Vamei 出处:http://www.cnblogs.com/vamei