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, 士兵和枪之间的关系