Python学习之旅--类和对象

本文详细介绍了类、对象的概念,如何在Python中定义和实例化类,包括属性、方法(init、str、del)、类属性、类方法和静态方法的使用,以及实战案例演示,帮助理解面向对象编程的基础原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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, 访问方式: 对象名.属性;  类名.属性
        3, 创建对象的时候,会将实例属性拷贝一份到对象中,修改之后不会影响类
        
    类的私有属性
        1, 在类的外部不能访问
        2, 在内部可以访问, self.__sex
    """""
    
    class Person(object):
    
        address = "北京市" # 类实例属性
        __sex = "男" # 类私有属性
    
        def __init__(self,name,age):
            self.name = name # 对象实例属性
            self.__age = age # 对象的私有属性
    
        def __str__(self):
            return f"{self.__sex},{self.name},{self.__age}"
    
    p1 = Person("张三",13)
    p1.address = "广州"
    Person.address = "天津"
    print(p1.address)
    print(Person.address)
    print(p1)
    print("=========================")
    
    p2 = Person("李四",14)
    print(p2.address)
    print(p2)
    
9, 类方法静态方法
  • 目的: 知道python中的静态方法,类方法区别作用

  • 操作流程

    """
    对象方法:
        1, 实例方法
        2, 私有方法
    
    类方法
        1, 实例方法
        2, 私有方法
        3, 定义格式: @classmethod def 方法名
    
    静态方法
        1, 实例方法
        2, 和类,对象都没有什么关系,里面不能使用任何属性
        3, 定义格式: @staticmethod def 方法名
    
    生命周期: 静态方法 > 类方法 > 对象方法
    
    调用特点:
    对象.实例方法()
    对象.类的实例方法()
    对象.静态方法()
    
    类.实例方法()
    类.静态方法()
    """""
    
    class Animal(object):
    
        #1,对象实例方法
        def eat(self):
            print("动物在吃饭")
    
        #2,对象的私有方法
        def __study(self):
            print("动物在学习")
    
        #3,类实例方法
        @classmethod
        def fly(self):
            print("动物在飞")
    
        #4,类私有方法
        @classmethod
        def __run(self):
            print("动物在跑")
    
        #5,静态方法
        @staticmethod
        def sleep():
            print("动物在睡觉")
    
    #测试
    bird = Animal()
    # bird.eat()
    # bird.__study() #私有方法,报错
    # bird.fly()
    # Animal.fly()
    # bird.__run() # 类私有方法,报错
    # Animal.__run() # 类私有方法,报错
    
    bird.sleep()
    Animal.sleep()
    
    
10, 实战案例一
  • 目的: 可以参考代码,练习烤土豆

  • 操作流程

    """
    烤土豆练习:
        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)
    
11, 实战案例二
  • 目的: 可以参考代码完成士兵开枪的案例

  • 操作流程

    """
    案例: 士兵开枪
    需求:
        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, 类方法, 静态方法, @classmethod, @staticmethod; 生命周期: 静态 > 类 > 对象

​ 静态方法内部, 不能使用任何属性

10, 烤土豆. 案例

11, 士兵和枪之间的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值