前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 面向对象、类、对象

python 面向对象、类、对象

作者头像
py3study
发布2020-01-10 10:48:38
1.3K0
发布2020-01-10 10:48:38
举报
文章被收录于专栏:python3python3

class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承

python中通过类和对象来实现 面向对象的编程 面向对象编程,最重要、主要的目的是:提高程序的重复使用性,这和函数的目的类似 python中一切皆对象,类也是对象 1 类是属性相近对象的归类 在人类认知中,会根据属性相近把‘东西’归类,并且给‘类别‘命名 比如鸟类共同属性是有羽毛,通过产卵生育后代。任何一只特别的鸟都是建立在鸟类的原型基础上 面向对象就是模拟了以上人类认知的过程。在python中,上述的‘东西‘称为对象 定义鸟类 

代码语言:javascript
复制
class Bird(object):#类,鸟;类  
    have_feather = True#变量,羽毛;属性  
    way_of_reproduction  = 'egg'#变量,生殖方式;属性  

定义类,名字鸟 该‘类别’中定义变量,1是否有羽毛,2生殖方式 这2个变量对应我们之前所说的属性

假如我养了一只小鸡,叫summer。他是个对象,属于鸟类。使用前面定义的类  

代码语言:javascript
复制
summer = Bird()#创建对象,初始化类 
print summer.way_of_reproduction#调用类属性 

第一句赋值语句,创建了对象并说明summer是类’鸟’中的一个对象, summer就有了鸟的’类属性' 对属性的引用是通过 对象.属性(object.attribute)的形式来实现 2 类属性可以是变量,也可以是方法(动作) 在人类日常认知中,我们在通过属性识别‘类别‘的时候,有时候会根据这个’东西’能做什么事情来区分类别 比如,鸟类会移动(这样就可以和房屋的类别区分开了)。而这些动作又会带来一定的结果,比如通过移动会带来位置的变化 python中,这样的属性称为方法。python中通过在’类内部定义函数’,来说明方法

代码语言:javascript
复制
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参数只是为了内部使用)

3 类别本身还可以进一步细分成子类

比如说,鸟类可以进一步分成鸡,大雁,黄鹂

在OOP中,我们通过继承来表达上述概念

代码语言:javascript
复制
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)

我们新定义的鸡(Chicken)类的,新增加了两个属性,移动方式(way_of_move)和可能在KFC找到(possible_in_KFC)

在类定义时,括号里改为了Bird,用来说明,Chicken是属于鸟类(Bird)的一个子类(Chicken继承自Bird),而自然而然,Bird就是Chicken的父类。通过这个声明,python就知道,Chicken具有Bird的所有属性。我们可以看到,尽管我只声明了summer是鸡类,它依然具有鸟类的属性(无论是变量属性have_feather还是方法属性move)

另外定义黄鹂(Oriole)类,同样继承自鸟类。这样,我们在有一个属于黄鹂的对象时,也会自动拥有鸟类的属性

通过继承制度,我们可以避免程序中的重复信息和重复语句。(如果我们分别定义两个类,而不继承自鸟类,那么我们就必须把鸟类的属性分别敲到鸡类和黄鹂类的定义中)

所以说,面向对象提高了程序的可重复使用性 我们可以看到,面向对象实际上基于人类认知时的习惯,将各种各样的东西分类,从而了解世界。我们从祖先开始可能已经练习了这个认知过程有几百万年,所以面向对象是很符合人类思维习惯的编程方法。所谓面向过程(也就是执行完一个语句再执行下一个)实际上是机器思维。通过面向对象的编程,我们实际上是更贴近我们自然的思维方式,也更方便和其他人交流我们程序里所包含的想法,甚至于那个人并不是程序员 

总结: 将东西根据属性归类 ( 将object归为class ) 方法是一种属性,表示动作 用继承来说明父类-子类关系。子类自动具有父类的所有属性。 self代表了根据该类定义而创建的对象。

建立对一个对象: 对象名 = 类名() 引用对象的属性: object.attribute

作者:Vamei 出处:http://www.cnblogs.com/vamei 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档