Python基础08 面向对象的基本概念

Python基础 面向对象的基本概念

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

谢谢逆水寒龙,topmad和Liqing纠错

Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。

面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。

下面是对面向对象的一种理解,基于分类。

相近对象,归为类

在人类认知中,会根据属性相近把东西归类,并且给类别命名。比如说,鸟类的共同属性是有羽毛,通过产卵生育后代。任何一只特别的鸟都在鸟类的原型基础上的。

面向对象就是模拟了以上人类认知过程。在Python语言,为了听起来酷,我们把上面说的“东西”称为对象(object)。

先定义鸟类

class Bird(object):
    have_feather = True
    way_of_reproduction  = ‘egg‘

我们定义了一个类别(class),就是鸟(Bird)。在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(have_feather),一个是生殖方式(way_of_reproduction),这两个变量对应我们刚才说的属性(attribute)。我们暂时先不说明括号以及其中的内容,记为问题1。

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

summer = Bird()
print summer.way_of_reproduction

通过第一句创建对象,并说明summer是类别鸟中的一个对象,summer就有了鸟的类属性,对属性的引用是通过 对象.属性(object.attribute) 的形式实现的。

可怜的summer,你就是个有毛产的蛋货,好不精致。

动作

日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。

这样的一些“行为”属性为方法(method)。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)

我们重新定义了鸟这个类别。鸟新增一个方法属性,就是表示移动的方法move。(我承认这个方法很傻,你可以在看过下一讲之后定义个有趣些的方法)

(它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。有关self的内容会在下一讲展开)

另外两个参数,dx, dy表示在x、y两个方向移动的距离。move方法会最终返回运算过的position。

在最后调用move方法的时候,我们只传递了dx和dy两个参数,不需要传递self参数(因为self只是为了内部使用)。

我的summer可以跑了。

子类

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

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

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

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的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)

新定义的黄鹂(Oriole)类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。

通过继承制度,我们可以减少程序中的重复信息和重复语句。如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。

(回到问题1, 括号中的object,当括号中为object时,说明这个类没有父类(到头了))

将各种各样的东西分类,从而了解世界,从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。所谓面向过程,也就是执行完一个语句再执行下一个,更多的是机器思维。通过面向对象的编程,我们可以更方便的表达思维中的复杂想法。

总结

将东西根据属性归类 ( 将object归为class )

方法是一种属性,表示动作

用继承来说明父类-子类关系。子类自动具有父类的所有属性。

self代表了根据类定义而创建的对象。

建立对一个对象: 对象名 = 类名()

引用对象的属性: object.attribute

时间: 2024-10-10 08:50:25

Python基础08 面向对象的基本概念的相关文章

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

Python基础09 面向对象的进一步拓展

Python基础09 面向对象的进一步拓展 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们熟悉了对象和类的基本概念.我们将进一步拓展,以便能实际运用对象和类. 调用类的其它信息 上一讲中提到,在定义方法时,必须有self这一参数.这个参数表示某个对象.对象拥有类的所有性质,那么我们可以通过self,调用类属性. class Human(object): laugh = 'hahahaha' def show_laugh(

python基础08

python基础09 1.文件操作. 模特主妇护士老师.txt 1.文件路径:d:\模特主妇护士老师.txt 2.编码方式:utf-8 gbk 3.操作方式:只读 ,只写 ,追加 ,读写 ,写读 以什么编码方式储存的文件,就以什么编码打开进行操作. f = open('d:\模特主妇护士班主任.txt',mode = 'r' , encoding = 'utf-8') content = f.read() print(content) f.close() f = open('模特主妇护士班主任'

【Python基础 08】函数基础

目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用 函数的使用包含两个步骤: 定义函数 -- 封装 独立的功能 调用函数 -- 享受 封装 的成果 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 演练步骤 新建 04_函数 项目 复制之前完成的 乘法表 文件 修改文件,增加函数定义 multiple_table

python3 速查参考- python基础 8 -&gt; 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self.name = name def __del__(self): # 函数属性:析构函数 print("goodbey ", self.name) I1 = C1('bob') #-- Python的类没有基于参数的函数重载 class FirstClass: def test(self,

Python基础之面向对象基本概念

面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果:函数不仅能执行,还能返回结果. 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现: 根据开发需求,将某些功能独立的代码封装成一个又一个函数: 最后完成的代码,就是顺序的调用不同的函数. 特点 注重步骤和过程,不注重职责分工: 如果复杂需求,代码会变得很复杂: 开发复杂项目,没有固定的套路,开发难度很大. 面向对象-谁来做 相比较函数,面向对象是更大的封装,根据职责在一个对象中

Python基础之面向对象2(封装)

一.封装定义: 二.作用 三.私有成员: 1.基本概念及作用 2.__slots__手段私有成员: 3.@property属性手段私有成员: 四.基础示例代码 1.用方法封装变量 """ 练习:用方法封装变量 """ class Enemy: def __init__(self,name,atk,speed,hp): self.set_name(name) self.set_atk(atk) self.set_atk_speed(speed) s

第八篇:python基础_8 面向对象与网络编程

本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. (2)归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合. 2.模拟接口 #!/usr/bin/env pyhon #encoding: utf-8 #auth: yanglei class Interface: #定义接口Interface类来模

Python基础day-16[面向对象编程(未完)]

面向对象: 相对于面向过程编程来讲,面向对象的扩展性比较强.但是同时带来的问题是可控性差,面向对象编程不像面向过程那样可以很精准的预测结果.面向对象程序一旦开始就由对象之间进行交互解决问题. 面向对象程序设计只是用来解决程序扩展性的. 什么是对象: 举一个例子:每个人都有自己特征和技能,那么每个人就是一个对象.对象就是特征与技能的结合体. 什么是类: 每个人都有自己独有特征也有和别人同样的技能或者特征.例如:基本每个人都会吃饭,都会睡觉,都会说话或者某两个人眼睛都挺大.我们可以把这些共同的技能或