上节课回顾:
属性:类属性 实例属性 私有属性(前面双下划线) 内置属性(前后都有双下划线)
方法:实例方法 静态方法 类方法 内置方法 私有方法
class 类名:
类主体(属性+方法)
def 实例方法名(self):
实例方法体
一、私有属性+私有方法
属性名:私有属性名
私有方法:私有方法名
class people:"""描述一个中国人类"""fuse="yellow" #类属性1language = "chain" # 类属性2__weight=90# 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用# 什么时候会重构构造方法‐‐‐》初始化数据def __init__(self,name,classname):print(f"实例化了一个对象,她的名称{name},班级{classname}")self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classnameself.classname=classnamedef __speakmimi(self):16 print("这是一个私有方法")# 定义行为? 说话 睡觉def speak(self):print(self,type(self))print("我说就是中国话")print("告诉一个秘密,我的体重是:", self.__weight)self.__speakmimi()xingji=people("xingji","M211")# print(xingji.__weight)xingji.speak()# print(xingji.__weight)# xingji.__speakmimiprint("私有属性及私有方法只能类内部使用,实例对象或类不可以在外部使用,""但是可以通过此种格式调用:对象._类名+私有属性/私有方法")print("1外部获取私有属性",xingji._people__weight)print("2外部获取私有方法:")xingji._people__speakmimi()
二、模块导包
from 模块 import 方法
from 上一级模块 import 下一级模块
import 模块
三、main()
main函数是调试代码的入口函数
也就是执行当前模块会执行,其他模块调用不会执行
四、面向对象特征:封装
封装:面向对象编程的第一步 将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法,对象方法的细节都被封装在类的内部
"""需求:小明爱跑步1.小明体重75.0公斤 属性 ‐‐>2.每次跑步会减肥0.5公斤 行为3.每次吃东西体重会增加1公斤 行为4.小美的体重是45.0公斤 属性"""# 定义一个类来进行表示 小明 小美class julebu:def __init__(self,name,weight):self.name=nameself.weight=weightdef eat(self):self.weight +=1print(f"每次吃东西体重会增加1公斤,你现在的体重{self.weight}")passdef pao(self):self.weight‐=0.5print("每次跑步会减肥0.5公斤,现在体重",self.weight)xming=julebu("小明",75)xming.pao()xming.eat()print(xming.weight)xmei=julebu("小美",45)xmei.pao()xmei.pao()xmei.eat()print(xmei.weight)c=julebu("cc",120)c.pao()36 c.eat()c.eat()print(c.weight)# 一、# # 1、摆放家具# # 需求:# # 1)房子有户型,总面积和家具名称列表 房子‐‐‐》 属性 面积和家具名称列表# # ?? ?新房子没有任何的家具 初始化时候特征# # 2)家具有名字和占地面积,其中 家具对象 ‐‐‐‐》属性:名字和占地面积# # ?? ?床:占4平米 ‐ 床 属性:面积# # ?? ?衣柜:占2平面 衣柜 属性:面积# # ?? ?餐桌:占1.5平米# # 3)将以上三件家具添加到房子中 行为# # 4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表 ‐‐‐》 获取属性# 分析对象相同属性及行为 及这些对象存在逻辑关系
作业
# 一、1、摆放家具# 需求:# 1)房子有户型,总面积和家具名称列表 # 属性# 新房子没有任何的家具 # 初始化# 2)家具有名字和占地面积,其中 # 属性# 床:占4平米 # 实例# 衣柜:占2平面 # 实例# 餐桌:占1.5平米 # 实例# 3)将以上三件家具添加到房子中 # 行为# 4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表class House():def __init__(self, house_type, total_area):self.house_type = house_typeself.total_area = total_areaself.left_area = total_areaself.jj_list = []def add_jj(self, project):if project.jj_area > self.left_area:print("%s家具面积太大,无法添加"%project.jj_name)self.left_area -= project.jj_areaself.jj_list.append(project.jj_name)def __str__(self):return f"户型:{self.house_type}\n总面积:{self.total_area}\n剩余面积:{self.left_area}\n家具名称列表:{self.jj_list}"class Jiaju():def __init__(self, name, area):self.jj_name = nameself.jj_area = areaif __name__ == "__main__":chuang = Jiaju("床", 4)yigui = Jiaju("衣柜", 2)canzhuo = Jiaju("餐桌", 1.5)# big_jj = Jiaju("超大家具", 100)house = House("三室一厅", 80)house.add_jj(chuang)house.add_jj(yigui)house.add_jj(canzhuo)# house.add_jj(big_jj)print(house)
# 二、2、需求:# 1)士兵瑞恩有一把AK47 # 属性# 2)士兵可以开火(士兵开火扣动的是扳机) # 行为# 3)枪 能够 发射子弹(把子弹发射出去) # 行为# 4)枪 能够 装填子弹 --增加子弹的数量 # 行为class Soldier():def __init__(self, soldier_name, gun_project):self.soldier_nam = soldier_nameself.gun = gun_projectdef fire(self, load_num, shot_num):if shot_num > load_num + self.gun.num_bullet:print(f"子弹不足,请装弹!当前子弹数:{self.gun.num_bullet + load_num}")self.left_num = self.gun.num_bullet + load_numelse:self.gun.load(load_num)self.gun.shot(shot_num)self.left_num = self.gun.num_bulletdef __str__(self) -> str:return f"士兵:{self.soldier_nam}\n枪{self.gun.gun_name}剩余子弹数:{self.left_num}"class Gun():def __init__(self, gun_name):self.num_bullet = 0self.gun_name = gun_namedef load(self, num):self.num_bullet += numdef shot(self, num):self.num_bullet -= numif __name__ == "__main__":AK47 = Gun("AK47")AK47.load(4)ruien = Soldier("ruien", AK47)ruien.fire(3,9)print(ruien)
# 一、请写一个小游戏,人狗大战,2个角色,人和狗,# 游戏开始后,生成2个人,3条狗,互相混战,# 人被狗咬了会掉血,# 狗被人打了也掉血,# 狗和人的攻击力,具备的功能都不一样。class People():def __init__(self, p_name, p_life, p_attack):self.p_name = p_nameself.p_life = p_lifeself.p_attack = p_attackdef play(self, dog):if self.p_life > 0:dog.d_life -= self.p_attackelse:print(f"人类{self.p_name}已经挂了,打不了狗子{dog.d_name}了")if dog.d_life <= 0:print(f"狗子{dog.d_name}已经挂了")dog.d_life = 0def __str__(self):return f"人类{self.p_name}剩余血量{self.p_life}"class Dog():def __init__(self, d_name, d_life, d_attack):self.d_name = d_nameself.d_life = d_lifeself.d_attack = d_attackdef bite(self, people):if self.d_life > 0:people.p_life -= self.d_attackelse:print(f"狗子{self.d_name}已经挂了,咬不了人类{people.p_name}了")if people.p_life <= 0:print(f"人类{people.p_name}已经挂了")people.p_life = 0def __str__(self):return f"狗子{self.d_name}剩余血量{self.d_life}"if __name__ == "__main__":zhangsan = People("张三", 20, 4)lisi = People("李四", 15, 5)dog1 = Dog("黑狗", 10, 6)dog2 = Dog("黄狗", 12, 5)dog3 = Dog("白狗", 11, 7)dog1.bite(zhangsan)dog1.bite(lisi)dog2.bite(lisi)zhangsan.play(dog2)lisi.play(dog2)dog3.bite(lisi)lisi.play(dog2)print(zhangsan,lisi,dog1,dog2,dog3)
