Python学习之旅--类和对象

Posted 赵jc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之旅--类和对象相关的知识,希望对你有一定的参考价值。

1, 类和对象

  • 目的: 知道什么是类, 什么是对象, 以及他们之间的关系
  • 类: 抽象的概念, 具有一类共性事物(属性, 方法)的统称
  • 对象: 类的一个实例, 具体的属性, 具体的行为
  • 关系: 一对多的关系, 一个类可以创建出无数个对象

2, 定义类

  • 目的: 可以通过python定义类

  • 操作流程:

    #1, 定义类, 系统中的一个基类,object
    class Person(object):
        # 属性
        def __init__(self):
            pass
    
        # 行为
        def play_game(self):
            print("是人就应该会打游戏")
    

3, 创建对象

  • 目的: 可以通过定义好的类, 创建一个对象

  • 操作流程:

    #1, 定义类, 系统中的一个基类,object
    class Person(object):
        # 属性
        def __init__(self):
            pass
    
        # 行为
        def play_game(self,name):
            print("是人就应该会打游戏".format(name))
    
    #2,通过类创建对象, 格式: 类()
    p = Person()
    
    #添加属性
    p.name = "迪丽热巴"
    p.sex = "女"
    p.height = 1.65
    print("我是,性别是,我的身高是".format(p.name,p.sex,p.height))
    
    #调用行为
    p.play_game("地下城勇士")
    
    print("==============================================")
    
    #3,创建第二个对象
    p2 = Person()
    p2.name = "古力娜扎"
    p2.sex = "女"
    p2.height = 1.77
    print("我是,性别是,我的身高是".format(p2.name,p2.sex,p2.height))
    p2.play_game("吃鸡")
    

4, 获取对象属性

  • 目的: 可以获取对象的属性

  • 操作流程

    """
    通过对象获取属性的两种方式:
        1, 对象名.属性
        2, self.属性
    
    self: 哪个对象调用方法, self就是哪个对象
    """
    
    #1, 定义类
    class Person(object):
        # 属性
        def __init__(self):
            pass
    
        # 方法
        def show_info(self):
            print("我是, 今年岁了".format(self.name,self.age))
    
    #2, 创建对象, 设置属性, 获取属性
    p = Person()
    p.name = "张三"
    p.age = 13
    print(p.name, p.age) # 对象名.属性
    p.show_info()
    
    print("=======================================")
    
    p2 = Person()
    p2.name = "刘亦菲"
    p2.age = 23
    p2.show_info()
    

5, init方法

  • 目的: 可以通过init方法, 创建对象的时候就设置属性

  • 操作流程

    #1, 定义类
    class Animal(object):
        # 属性, 只要创建对象就会调用
        def __init__(self,nick_name,color):
            self.nick_name = nick_name
            self.color = color
    
        # 函数(行为,方法)
        def show_info(self):
            print(self.nick_name, self.color)
    
    #2, 创建对象
    cat = Animal("咖啡猫","红色")
    cat.show_info()
    
    dog = Animal("旺财","黄色")
    dog.show_info()
    

6, str方法

  • 目的: 可以重写str方法,进行制定内容的输出

  • 操作流程

    • _str_: 输出对象的时候会自动调用
    class Animal(object):
        def __init__(self,name,color):
            self.name = name
            self.color = color
    
        # 当我们去输出该类的对象时候, 会自动调用该方法
        def __str__(self):
            return self.name
    
    cat = Animal("咖啡喵","绿色")
    print(cat)
    

7, del方法

  • 目的: 知道del方法调用的顺序和时间

  • 操作流程

    class Animal(object):
        def __init__(self,name,color):
            self.name = name
            self.color = color
    
        # 当我们去输出该类的对象时候, 会自动调用该方法
        def __str__(self):
            return self.name
    
        # 当程序运行结束之后会调用该方法
        def __del__(self):
            print("__del__被调用了")
    
    #1, 创建对象
    cat = Animal("咖啡喵","绿色")
    
    #2, 添加一个引用
    cat2 = cat
    
    #3,删除cat,如果有多个引用指向cat那么只有当所有的引用被删除之后del方法才会马上调用
    del cat 
    del cat2 # 删除对象引用, 会自动调用del方法
    
    print("aaaaa")
    
    

8, 实战案例一

  • 目的: 可以参考代码,练习烤土豆

  • 操作流程

    """
    烤土豆练习:
        1, 创建类
        2, 定义初始化方法,初始化属性level,cookie_status
        3, 定义方法,cookie_potato,接收烘烤的时间
            a, 如果烘烤的时间在[1,3] 半熟
            b, 如果烘烤的时间在(3,5] 熟透了
            c, 如果烘烤的时间在(5,) 烤糊了
    """
    # 1, 创建类
    class Potato(object):
        # 2, 定义初始化方法, 初始化属性level, cookie_status
        def __init__(self,level,cookie_status):
            self.level = level
            self.cookie_status = cookie_status
    
        #3,定义方法,cookie_potato,接收烘烤的时间
        def cookie_potato(self,time):
            #3,1 设置烘烤的时间
            self.level += time
    
            #3,2 判断时间,设置土豆的状态
            if 1<= self.level <=3:
                self.cookie_status = "半生不熟"
            elif 3 < self.level <= 5:
                self.cookie_status = "熟透了,可以吃了"
            elif self.level > 5:
                self.cookie_status = "烤糊啦!"
            else:
                self.cookie_status = "生的"
    
        #4,重写str方法,方便查看对象的属性
        def __str__(self):
            return self.cookie_status
    
    #5, 测试
    p = Potato(0,"生的")
    
    #6,连续烘烤
    p.cookie_potato(1)
    p.cookie_potato(1)
    p.cookie_potato(1)
    p.cookie_potato(8)
    
    #7,查看状态
    print(p)
    

9, 实战案例二

  • 目的: 可以参考代码完成士兵开枪的案例

  • 操作流程

    """
    案例: 士兵开枪
    需求:
        1, 定义士兵类,有枪,姓名属性
        2, 有射击的方法
        3, 定义枪类,有型号,突突突的方法
    """""
    #1, 定义士兵类
    class Soldier(object):
        #1,初始化属性
        def __init__(self,name,gun):
            self.name = name # 姓名
            self.gun = gun # 枪的属性
    
        #2,射击
        def shoot(self):
            self.gun.tututu(self.name)
    
    #2, 定义枪类
    class Gun(object):
        #1,初始化属性
        def __init__(self,style):
            self.style = style
    
        #2,方法
        def tututu(self,name):
            print(f"name使用了self.style型号的枪,向敌人突突突...")
    
    #3,使用
    gun = Gun("黄金AK47")
    soldier = Soldier("王宝强",gun)
    soldier.shoot()
    

总结

1, 类和对象, 一对多关系, 一个类可以创建出无数个对象

2, 定义类, 格式: class 类名(object): pass

3, 创建对象, 格式: 对象名= 类名(参数)

4, 获取对象属性, 在类的方法内部self.属性, 在类的外部,对象名.属性

5, init作用, 在创建对象的时候,用来初始化对象的属性

6, str方法, 当输出一个对象的时候, 会自动调用的方法, 一般会进行重写

7, del方法, 当一个对象的引用变成0的时候会调用

8, 烤土豆. 案例

9, 士兵和枪之间的关系

以上是关于Python学习之旅--类和对象的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之旅(十八)

Python学习之旅

Python学习之旅(二十二)

Python的学习之旅———函数对象函数嵌套名称空间与作用域装饰器

Python学习之旅—DjangoORM基础

C++学习之旅第二站:类和对象进阶