上节课回顾:
属性:类属性 实例属性 私有属性(前面双下划线) 内置属性(前后都有双下划线)
方法:实例方法 静态方法 类方法 内置方法 私有方法
class 类名:
类主体(属性+方法)
def 实例方法名(self):
实例方法体

一、私有属性+私有方法

属性名:私有属性名
私有方法:
私有方法名

  1. class people:
  2. """描述一个中国人类"""
  3. fuse="yellow" #类属性1
  4. language = "chain" # 类属性2
  5. __weight=90
  6. # 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用
  7. # 什么时候会重构构造方法‐‐‐》初始化数据
  8. def __init__(self,name,classname):
  9. print(f"实例化了一个对象,她的名称{name},班级{classname}")
  10. self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classname
  11. self.classname=classname
  12. def __speakmimi(self):16 print("这是一个私有方法")
  13. # 定义行为? 说话 睡觉
  14. def speak(self):
  15. print(self,type(self))
  16. print("我说就是中国话")
  17. print("告诉一个秘密,我的体重是:", self.__weight)
  18. self.__speakmimi()
  19. xingji=people("xingji","M211")
  20. # print(xingji.__weight)
  21. xingji.speak()
  22. # print(xingji.__weight)
  23. # xingji.__speakmimi
  24. print("私有属性及私有方法只能类内部使用,实例对象或类不可以在外部使用,"
  25. "但是可以通过此种格式调用:对象._类名+私有属性/私有方法")
  26. print("1外部获取私有属性",xingji._people__weight)
  27. print("2外部获取私有方法:")
  28. xingji._people__speakmimi()

二、模块导包

from 模块 import 方法
from 上一级模块 import 下一级模块
import 模块

三、main()

main函数是调试代码的入口函数
也就是执行当前模块会执行,其他模块调用不会执行

四、面向对象特征:封装

封装:面向对象编程的第一步 将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法,对象方法的细节都被封装在类的内部

  1. """
  2. 需求:小明爱跑步
  3. 1.小明体重75.0公斤 属性 ‐‐>
  4. 2.每次跑步会减肥0.5公斤 行为
  5. 3.每次吃东西体重会增加1公斤 行为
  6. 4.小美的体重是45.0公斤 属性
  7. """
  8. # 定义一个类来进行表示 小明 小美
  9. class julebu:
  10. def __init__(self,name,weight):
  11. self.name=name
  12. self.weight=weight
  13. def eat(self):
  14. self.weight +=1
  15. print(f"每次吃东西体重会增加1公斤,你现在的体重{self.weight}")
  16. pass
  17. def pao(self):
  18. self.weight‐=0.5
  19. print("每次跑步会减肥0.5公斤,现在体重",self.weight)
  20. xming=julebu("小明",75)
  21. xming.pao()
  22. xming.eat()
  23. print(xming.weight)
  24. xmei=julebu("小美",45)
  25. xmei.pao()
  26. xmei.pao()
  27. xmei.eat()
  28. print(xmei.weight)
  29. c=julebu("cc",120)
  30. c.pao()36 c.eat()
  31. c.eat()
  32. print(c.weight)
  33. # 一、
  34. # # 1、摆放家具
  35. # # 需求:
  36. # # 1)房子有户型,总面积和家具名称列表 房子‐‐‐》 属性 面积和家具名称列表
  37. # # ?? ?新房子没有任何的家具 初始化时候特征
  38. # # 2)家具有名字和占地面积,其中 家具对象 ‐‐‐‐》属性:名字和占地面积
  39. # # ?? ?床:占4平米 ‐ 床 属性:面积
  40. # # ?? ?衣柜:占2平面 衣柜 属性:面积
  41. # # ?? ?餐桌:占1.5平米
  42. # # 3)将以上三件家具添加到房子中 行为
  43. # # 4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表 ‐‐‐》 获取属性
  44. # 分析对象相同属性及行为 及这些对象存在逻辑关系

作业

作业答案_面向对象2.txt
附加作业.txt

  1. # 一、1、摆放家具
  2. # 需求:
  3. # 1)房子有户型,总面积和家具名称列表 # 属性
  4. # 新房子没有任何的家具 # 初始化
  5. # 2)家具有名字和占地面积,其中 # 属性
  6. # 床:占4平米 # 实例
  7. # 衣柜:占2平面 # 实例
  8. # 餐桌:占1.5平米 # 实例
  9. # 3)将以上三件家具添加到房子中 # 行为
  10. # 4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
  11. class House():
  12. def __init__(self, house_type, total_area):
  13. self.house_type = house_type
  14. self.total_area = total_area
  15. self.left_area = total_area
  16. self.jj_list = []
  17. def add_jj(self, project):
  18. if project.jj_area > self.left_area:
  19. print("%s家具面积太大,无法添加"%project.jj_name)
  20. self.left_area -= project.jj_area
  21. self.jj_list.append(project.jj_name)
  22. def __str__(self):
  23. return f"户型:{self.house_type}\n总面积:{self.total_area}\n剩余面积:{self.left_area}\n家具名称列表:{self.jj_list}"
  24. class Jiaju():
  25. def __init__(self, name, area):
  26. self.jj_name = name
  27. self.jj_area = area
  28. if __name__ == "__main__":
  29. chuang = Jiaju("床", 4)
  30. yigui = Jiaju("衣柜", 2)
  31. canzhuo = Jiaju("餐桌", 1.5)
  32. # big_jj = Jiaju("超大家具", 100)
  33. house = House("三室一厅", 80)
  34. house.add_jj(chuang)
  35. house.add_jj(yigui)
  36. house.add_jj(canzhuo)
  37. # house.add_jj(big_jj)
  38. print(house)
  1. # 二、2、需求:
  2. # 1)士兵瑞恩有一把AK47 # 属性
  3. # 2)士兵可以开火(士兵开火扣动的是扳机) # 行为
  4. # 3)枪 能够 发射子弹(把子弹发射出去) # 行为
  5. # 4)枪 能够 装填子弹 --增加子弹的数量 # 行为
  6. class Soldier():
  7. def __init__(self, soldier_name, gun_project):
  8. self.soldier_nam = soldier_name
  9. self.gun = gun_project
  10. def fire(self, load_num, shot_num):
  11. if shot_num > load_num + self.gun.num_bullet:
  12. print(f"子弹不足,请装弹!当前子弹数:{self.gun.num_bullet + load_num}")
  13. self.left_num = self.gun.num_bullet + load_num
  14. else:
  15. self.gun.load(load_num)
  16. self.gun.shot(shot_num)
  17. self.left_num = self.gun.num_bullet
  18. def __str__(self) -> str:
  19. return f"士兵:{self.soldier_nam}\n枪{self.gun.gun_name}剩余子弹数:{self.left_num}"
  20. class Gun():
  21. def __init__(self, gun_name):
  22. self.num_bullet = 0
  23. self.gun_name = gun_name
  24. def load(self, num):
  25. self.num_bullet += num
  26. def shot(self, num):
  27. self.num_bullet -= num
  28. if __name__ == "__main__":
  29. AK47 = Gun("AK47")
  30. AK47.load(4)
  31. ruien = Soldier("ruien", AK47)
  32. ruien.fire(3,9)
  33. print(ruien)
  1. # 一、请写一个小游戏,人狗大战,2个角色,人和狗,
  2. # 游戏开始后,生成2个人,3条狗,互相混战,
  3. # 人被狗咬了会掉血,
  4. # 狗被人打了也掉血,
  5. # 狗和人的攻击力,具备的功能都不一样。
  6. class People():
  7. def __init__(self, p_name, p_life, p_attack):
  8. self.p_name = p_name
  9. self.p_life = p_life
  10. self.p_attack = p_attack
  11. def play(self, dog):
  12. if self.p_life > 0:
  13. dog.d_life -= self.p_attack
  14. else:
  15. print(f"人类{self.p_name}已经挂了,打不了狗子{dog.d_name}了")
  16. if dog.d_life <= 0:
  17. print(f"狗子{dog.d_name}已经挂了")
  18. dog.d_life = 0
  19. def __str__(self):
  20. return f"人类{self.p_name}剩余血量{self.p_life}"
  21. class Dog():
  22. def __init__(self, d_name, d_life, d_attack):
  23. self.d_name = d_name
  24. self.d_life = d_life
  25. self.d_attack = d_attack
  26. def bite(self, people):
  27. if self.d_life > 0:
  28. people.p_life -= self.d_attack
  29. else:
  30. print(f"狗子{self.d_name}已经挂了,咬不了人类{people.p_name}了")
  31. if people.p_life <= 0:
  32. print(f"人类{people.p_name}已经挂了")
  33. people.p_life = 0
  34. def __str__(self):
  35. return f"狗子{self.d_name}剩余血量{self.d_life}"
  36. if __name__ == "__main__":
  37. zhangsan = People("张三", 20, 4)
  38. lisi = People("李四", 15, 5)
  39. dog1 = Dog("黑狗", 10, 6)
  40. dog2 = Dog("黄狗", 12, 5)
  41. dog3 = Dog("白狗", 11, 7)
  42. dog1.bite(zhangsan)
  43. dog1.bite(lisi)
  44. dog2.bite(lisi)
  45. zhangsan.play(dog2)
  46. lisi.play(dog2)
  47. dog3.bite(lisi)
  48. lisi.play(dog2)
  49. print(zhangsan,lisi,dog1,dog2,dog3)