• 趣味解读Python面向对象编程 (类和对象)


    一、面向对象简介

    考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍。而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁。

    用我们的现实思维方式该怎么用程序表达呢?

    • 面向过程:根据业务逻辑从上到下写代码。

    • 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。

      面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑。

    今天来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)。

    面向对象编程的2个非常重要的概念:类和对象。

    对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。

    类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象。

    二、分析类与对象

    1. 类

    物以类聚,人以群分。
    具有相似内部状态和运动规律的实体的集合(或统称为抽象)。
    具有相同属性和行为事物的统称。

    类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在,一个类可以找到多个对象。

    2. 对象

    某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。可以是直接使用的。

    3. 类和对象之间的关系

    小总结:类就是创建对象的模板。

    4. 区分类和对象

    奔驰smart 类
    张三的那辆奔驰smart 对象
    水果 类
    苹果 类
    红苹果 类 红富士苹果 类
    我嘴里吃了一半的苹果 对象

    5. 类的构成

    类(Class) 由3个部分构成

    • 类的名称:类名

    • 类的属性:一组数据

    • 类的方法:允许对对象进行操作的方法 (行为)

    举例:

    1)人类设计,只关心3样东西:

    • 事物名称(类名):人(Person)

    • 属性:身高(height)、年龄(age)

    • 方法(行为/功能):跑(run)、打架(fight)

    2)狗类的设计

    • 类名:狗(Dog)

    • 属性:品种 、毛色、性别、名字、 腿儿的数量

    • 方法(行为/功能):叫 、跑、咬人、吃、摇尾巴

    6. 类的抽象

    如何把日常生活中的事物抽象成程序中的类?

    拥有相同(或者类似)属性和行为的对象都可以抽像出一个类。

    方法:一般名词都是类(名词提炼法)

    <1> 坦克发射3颗炮弹轰掉了2架飞机
    • 坦克 --> 可以抽象成类。

    • 炮弹 --> 可以抽象成类。

    • 飞机 --> 可以抽象成类。

    <2> 小明在公车上牵着一条叼着热狗的狗
    • 小明 --> 人类。

    • 公车 --> 交通工具类。

    • 热狗 --> 食物类。

    • 狗 --> 狗类。

    <3>【想一想】如下图中,有哪些类呢?

    说明:

    • 子弹

    • 手榴弹

    • 刀子

    • 箱子

    <4>【想一想】如下图中,有哪些类呢?

    说明:

    • 向日葵

    • 类名:xrk

    • 属性:颜色、品类

    • 行为:放阳光

    • 豌豆

    • 类名:wd

    • 属性:颜色 、发型、血量

    • 行为:发炮、摇头

    • 坚果:

    • 类名:jg

    • 属性:血量、类型

    • 行为:阻挡

    • 僵尸:

    • 类名:js

    • 属性:颜色、血量、 类型、速度

    • 行为:走、跑跳、吃、死

    三、项目

    1. 定义类

    定义一个类,格式如下:

    class 类名:
        方法列表
    

    demo:定义一个Cat类

    # 定义类
    class Cat:
       # 方法
       def eat(self):
           print("猫在吃鱼....")
    
       def drink(self):
           print("猫在喝可乐...")
    

    说明:

    • 定义类时有2种:新式类和经典类,上面的Cat为经典类,如果是Cat(object)则为新式类

    • 类名的命名规则按照"大驼峰"。

    2. 创建对象

    Python中,可以根据已经定义的类去创建出一个个对象。

    创建对象的格式为:

    对象名 = 类名()
    

    创建对象demo:

    # 定义一个类
    class Cat:
       # 属性
       # 方法
       def eat(self):
           print("猫在吃鱼....")
    
       def drink(self):
           print("猫在喝可乐...")
    
    # 根据类,创建一个对象
    tom = Cat()
    

    3. 调用对象的方法

    class Cat:
       # 属性
       # 方法
       def eat(self):
           print("猫在吃鱼....")
    
       def drink(self):
           print("猫在喝可乐...")
    
    # 创建了一个对象
    tom = Cat()
    tom.eat() # 调用对象的eat方法
    tom.drink()
    

    运行结果,如图所示:

    4. 给对象添加属性

    class Cat:
        # 属性
        # 方法
        def eat(self):
            print("猫在吃鱼....")
    
        def drink(self):
            print("猫在喝可乐...")
    
    # 创建了一个对象
    tom = Cat()
    
    # 给对象tom添加了一个属性,叫name,里面的值是"汤姆"
    tom.name = "汤姆"
    
    # 给对象tom添加了一个属性,叫age,里面的值是30
    tom.age = 30
    
    # 调用tom的方法
    tom.eat()
    tom.drink()
    print(tom.name)
    print(tom.age)
    

    运行结果,如图所示:

    5. 通过方法获取对象属性。

    class Cat:
        # 属性
        # 方法
        def eat(self):
            print("猫在吃鱼....")
    
        def drink(self):
            print("猫在喝可乐...")
    
        def introduce(self):
            # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄))
            print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
    
    # 创建了一个对象
    tom = Cat()
    
    # 给对象tom添加了一个属性,叫name,里面的值是"汤姆"
    tom.name = "汤姆"
    tom.age = 30
    
    # 调用tom的方法
    tom.eat()
    tom.drink()
    
    # 直接通过对象获取其属性
    print(tom.name)
    print(tom.age)
    
    print("-"*30)
    
    # 调用tom的方法,在其方法中获取它的属性
    tom.introduce()
    

    运行结果,如图所示:

    四、总结

    本文以生活中的基础现象为切入点,主要介绍了Python的面向对象基础知识,用丰富的案例帮助大家更好的去了解对象,最后以一只猫作为小项目,使用Python编程语言,方便大家增加对类和对象的认识,希望对大家的学习有帮助。
    想学习更多Python网络爬虫与数据挖掘知识,大家可前往专业网站:http://pdcfighting.com/

  • 相关阅读:
    javascript中的console.log有什么作用?
    在线js调试工具JSbin、jsFiddle
    mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子
    处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
    checkbox的readonly不起作用的解决方案
    jquery-easyui combobox combogrid 级联不可编辑实例
    表格行的全选与单选
    表格与ckeckbox的全选与单选
    隐藏与显示铵钮
    判断字符是否包含有特殊字符
  • 原文地址:https://www.cnblogs.com/dcpeng/p/13743497.html
Copyright © 2020-2023  润新知