上节课回顾:
属性:类属性 实例属性 私有属性(前面双下划线) 内置属性(前后都有双下划线)
方法:实例方法 静态方法 类方法 内置方法 私有方法
class 类名:
类主体(属性+方法)
def 实例方法名(self):
实例方法体
一、私有属性+私有方法
属性名:私有属性名
私有方法:私有方法名
class people:
"""描述一个中国人类"""
fuse="yellow" #类属性1
language = "chain" # 类属性2
__weight=90
# 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用
# 什么时候会重构构造方法‐‐‐》初始化数据
def __init__(self,name,classname):
print(f"实例化了一个对象,她的名称{name},班级{classname}")
self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classname
self.classname=classname
def __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.__speakmimi
print("私有属性及私有方法只能类内部使用,实例对象或类不可以在外部使用,"
"但是可以通过此种格式调用:对象._类名+私有属性/私有方法")
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=name
self.weight=weight
def eat(self):
self.weight +=1
print(f"每次吃东西体重会增加1公斤,你现在的体重{self.weight}")
pass
def pao(self):
self.weight‐=0.5
print("每次跑步会减肥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_type
self.total_area = total_area
self.left_area = total_area
self.jj_list = []
def add_jj(self, project):
if project.jj_area > self.left_area:
print("%s家具面积太大,无法添加"%project.jj_name)
self.left_area -= project.jj_area
self.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 = name
self.jj_area = area
if __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_name
self.gun = gun_project
def 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_num
else:
self.gun.load(load_num)
self.gun.shot(shot_num)
self.left_num = self.gun.num_bullet
def __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 = 0
self.gun_name = gun_name
def load(self, num):
self.num_bullet += num
def shot(self, num):
self.num_bullet -= num
if __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_name
self.p_life = p_life
self.p_attack = p_attack
def play(self, dog):
if self.p_life > 0:
dog.d_life -= self.p_attack
else:
print(f"人类{self.p_name}已经挂了,打不了狗子{dog.d_name}了")
if dog.d_life <= 0:
print(f"狗子{dog.d_name}已经挂了")
dog.d_life = 0
def __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_name
self.d_life = d_life
self.d_attack = d_attack
def bite(self, people):
if self.d_life > 0:
people.p_life -= self.d_attack
else:
print(f"狗子{self.d_name}已经挂了,咬不了人类{people.p_name}了")
if people.p_life <= 0:
print(f"人类{people.p_name}已经挂了")
people.p_life = 0
def __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)