当前位置:天才代写 > tutorial > Python教程 > Python基本教程08 – 面向工具的根基观念

Python基本教程08 – 面向工具的根基观念

2017-11-02 08:00 星期四 所属: Python教程 浏览:959

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时,说明这个类没有父类(到头了))

#p#分页标题#e#

将各类百般的对象分类,从而相识世界,从人类祖先开始,我们就在操练了这个认知进程,面向工具是切合人类思维习惯的。所谓面向进程,也就是执行完一个语句再执行下一个,更多的是呆板思维。通过面向工具的编程,我们可以更利便的表达思维中的巨大想法。

总结

将对象按照属性归类 ( 将object归为class )

要领是一种属性,暗示行动

用担任来说明父类-子类干系。子类自动具有父类的所有属性。

self代表了按照类界说而建设的工具。

成立对一个工具: 工具名 = 类名()

引用工具的属性: object.attribute

 

    关键字:

天才代写-代写联系方式