美文网首页
和小家伙一起学编程 005 对象

和小家伙一起学编程 005 对象

作者: 木象 | 来源:发表于2019-02-06 15:03 被阅读0次

    学习编程的过程中,渐渐的,我们就会遇到一些更复杂抽象的概念。

    比如,面向对象的编程(Object-oriented programming)。这是目前主流的编程思想,或者编程方法之一。

    面向对象的概念,最初是在1950s~1960s年代的MIT(麻省理工学院)提出的,用于人工智能和图形交互界面。

    举一个简单的例子,我们要做一个猜动物的小游戏:

    涉及三类动物,哺乳动物、鸟类、爬行动物,每一类有几种动物的例子,比如马、猫、大象、蝙蝠、鸭嘴兽、鹦鹉、 鹅、乌龟、科莫多龙等等。

    每一类动物具有一些共同的特征,比如有四条腿、有翅膀、可以飞行、通过哺乳喂养幼崽等等……

    我们可以将每种动物的每一个特征都详细列出来,但是这很麻烦,有很多重复劳动;我们也可以先把某一类动物的共同特征列出来,指出某种动物属于某一类,然后只要说明它独特的部分就行了。

    我们创建一些类,描述它们的属性和方法,还可以创造子类以及子类的子类,比如哺乳动物类,猫科动物子类,家猫子类(我们并没有使用生物学上严格的分类方法,只是举个例子);我们可以创建这些类或子类的对象,比如小明家的加菲猫……

    这种分类创建对象来构建和组织代码编程的方法,就是面向对象编程了。

    因为这符合我们看待世界和解决某些问题的思维方式,所以这样编程是有效的,特别是适合图形交互界面编程,以及大型的团队合作编程。

    说到这里,来看看个人电脑早期的经典APPLE II的图形界面吧:

    Apple II GUI

    顺便推荐两本书:

    我是沃兹

    我是沃兹: 一段硅谷和苹果的悲情罗曼史

    黑客

    黑客:计算机革命的英雄(二十五周年新版)

    Scratch中没有类的概念,但是每个角色都是一个对象,它们有自己的属性,比如位置、大小、颜色特效等,可以为每个角色编写代码,让它们按照我们的设想行动,与我们交互,它们之间还可以通过广播来发送和接收消息,我们可以在编辑时复制、在程序运行时克隆这些角色(或者说对象)。这些在之前的例子中都出现了,不举例了。

    或者,跳一下去看《007 算法》的例子吧。

    Python呢,有句话说,在Python中,一切皆对象。

    Python 关于对象的例子

    编辑文件oop.py:

    # 定义哺乳动物类
    class mammal:
        # 哺乳动物哺乳
        lactation = True
        def tell(self):
            print("我是哺乳动物!")
    
    # 定义猫科动物类(哺乳动物的子类)
    class felid(mammal):
        # 猫科动物是肉食的
        carnivorous = True
        def tell(self):
            print("我是猫科动物!")
        
    # 定义猫类(猫科动物的子类)
    class cat(felid):
        name = ""
        # 猫捕鼠
        mouse_hunting = True
        def __init__(self, name):
            felid.__init__(self)
            self.name = name
        def tell(self):
            print("我是猫!")
        def about(self):
            print("我是一只名叫\"%s\"的猫!" % (self.name))
    

    运行oop.py(每次运行id的数字会不同,不用管他):

    >>> elephant = mammal()
    >>> id(elephant)
    3102587337528
    >>> type(elephant)
    <class '__main__.mammal'>
    >>> elephant.lactation
    True
    >>> elephant.tell()
    我是哺乳动物!
    >>> tiger = felid()
    >>> id(tiger)
    3102586816328
    >>> type(tiger)
    <class '__main__.felid'>
    >>> tiger.lactation
    True
    >>> tiger.carnivorous
    True
    >>> tiger.tell()
    我是猫科动物!
    >>> tom = cat("Tom")
    >>> id(tom)
    3102587479600
    >>> type(tom)
    <class '__main__.cat'>
    >>> tom.lactation
    True
    >>> tom.carnivorous
    True
    >>> tom.mouse_hunting
    True
    >>> tom.tell()
    我是猫!
    >>> tom.about()
    我是一只名叫"Tom"的猫!
    >>> 
    

    python中的对象都符合三个特征:

    id,可以当中机器中区分每个对象的门牌号码,可以用id()这个方法来查询;

    type,即对象所属的类,可以用type()方法来查询;

    对象的值,可以说是对象包含的数据。

    这些,从上面的例子就可以看到了。那么,为什么说在Python中一切皆对象呢?

    来试试看吧:

    >>> a = 123
    >>> id(a)
    1805024544
    >>> type(a)
    <class 'int'>
    >>> b = "two words"
    >>> id(b)
    3102587445040
    >>> type(b)
    <class 'str'>
    >>> id(id)
    3102548261840
    >>> type(id)
    <class 'builtin_function_or_method'>
    >>> id(type)
    1804583984
    >>> type(type)
    <class 'type'>
    

    节点目录

    和小家伙一起学编程 000 出发

    和小家伙一起学编程 001 条件

    和小家伙一起学编程 002 循环

    和小家伙一起学编程 003 随机

    和小家伙一起学编程 004 编码

    和小家伙一起学编程 005 对象

    和小家伙一起学编程 006 函数

    和小家伙一起学编程 007 算法

    相关文章

      网友评论

          本文标题:和小家伙一起学编程 005 对象

          本文链接:https://www.haomeiwen.com/subject/zguksqtx.html