50、类基础语法
python
# 猫咪:
# 1.属性:颜色、年龄
# 2.行为():跑、吃饭
class Cat: # 定义类的名字
# 1.属性 放在__init__初始化函数中
def __init__(self,name,color): # name和color是形参
# 实例化对象的属性 = 形参
# 后续调用这个初始化函数的时候,就可以把猫咪的颜色和名字设置好了
self.name = name # self.name 是类的名字属性 后面的name是传过来的形参的值
self.color = color
# 2.行为
def eat(self): # self 代表当前类自己,代表这个小猫咪自己
print("吃饭")
def drink(self):
print("喝水")
# mimi = Cat() # 实例化小猫咪 mimi就是实例化对象
# mimi.eat()
# mimi.drink()
#
# xiaohuang = Cat() # 实例化小猫咪 xiaohuang就是实例化对象
# xiaohuang.eat()
# xiaohuang.drink()
qinghua_mao = Cat("猫咪","黑") # 小括号中的参数,就是给__init__初始化函数传的参数
print(qinghua_mao.color) # .print
print(qinghua_mao.name)
qinghua_mao.drink()
qinghua_mao.eat()
lsg_mao = Cat("波斯猫","白色")
print(lsg_mao.name)
print(lsg_mao.color)
lsg_mao.eat()
lsg_mao.drink()
class Car2:
def __init__(self,name,age):
self.name = name
self.age = age
def sleep(self):
print(f"{self.name}正在睡觉,她{self.age}岁了")
def run(self):
print(f"阳光下,{self.name}正在愉快的奔跑")
wenfang_cat = Car2("波斯猫","2")
print(wenfang_cat.name)
print(wenfang_cat.age)
wenfang_cat.sleep()
wenfang_cat.run()
51、类练习
python
# 狗:
# 属性: 名字、颜色、年龄
# 行为(函数、方法):吃饭、睡觉
class Dog:
# 属性: 名字、颜色、年龄
# 初始化
def __init__(self,name,color,age): # 程序准备的__init__构造函数
self.name = name
self.color = color
self.age = age
# 行为(函数、方法):吃饭、睡觉
def eat(self):
print(f"{self.age}岁的{self.color}色的{self.name}在吃饭")
def sleep(self):
print(f"{self.age}岁的{self.color}{self.name}在睡觉")
def __str__(self): # 系统自带,就是当你打印实例化对象的时候才会执行,这个函数务必设置返回值
return f"我叫{self.name},我是{self.color}的,我今年{self.age}岁了"
dog1 = Dog("小黄","白色",3) # 运行这行代码,会自动执行类里的初始化 ,自动传参
dog1.sleep()
dog1.eat()
print(dog1) # 打印实例化对象才会执行__str__函数中的代码,而这个函数务必设置返回值
52、跑步类
python
# 属性:人名字、人体重
# 行为(方法、函数):每次跑步会减重0.5 每次吃东西增重1
class Person:
# 1.属性 初始化函数
def __init__(self,name,weight):
self.name = name
self.weight = weight
# 2.行为
def run(self):
self.weight -= 0.5
print(f"我的名字是{self.name},我刚跑步了,我现在的体重是{self.weight}")
def eat(self):
self.weight += 1
print(f"我的名字是{self.name},我刚跑步了,我现在的体重是{self.weight}")
def __str__(self):
return f"我是{self.name}我现在的体重是{self.weight}"
en = Person("恩老师",80)
en.run()
en.run()
en.run()
en.eat()
print(en)
shu_guang = Person("曙光",70)
shu_guang.eat()
shu_guang.run()
print(shu_guang)
# class Person:
# def __init__(self,name,weight):
# self.name = name
# self.weight = weight
# def run(self):
# self.weight -= 0.5
# print(f"我叫{self.name},我刚才跑步了,我现在的体重是{self.weight}")
# def eat(self):
# self.weight += 1
# print(f"我叫{self.name},我吃饭了,我现在的体重是{self.weight}")
# def __str__(self):
# return f"我是{self.name},我现在的体重是{self.weight}"
#
# lsg = Person("lsg",80)
# lsg.run()
# lsg.eat()
# print(lsg)
53、家具摆放
python
# 1.家具(HouseItem) 有 名字 和 占地面积,其中席梦思(bed) 占地 4 平米
# 衣柜(chest) 占地 2 平米 餐桌(table) 占地 1.5 平米
# 2.房子(House) 有 户型、总面积 和 家具名称列表,新房子没有任何的家具
# 3.将以上三件 家具 添加 到 房子 中
# 4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
# 剩余面积:
# 1.在创建房子对象时,定义一个 剩余面积的属性,初始值和总面积相等
# 当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积
# 1.判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具
# 2.将家具的名称 追加到 家具名称列表 中
# 3.用房子的剩余面积 - 家具面积 > 0 可以添加进去,否则不能添加进去
# 家具类
class HouseItem:
# 属性的内容和数量 自己定,需要什么就加什么,与要传的 形参的个数 无关
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
return f"{self.name},占地面积为{self.area}平米"
class House:
# 属性:户型、总面积、剩余面积、默认没有家具,所以只需要提供一个空列表
# 属性的内容和数量 自己定,需要什么就加什么,与要传的形参个数无关
def __init__(self,house_type,area):
self.house_type = house_type # 户型
self.area = area # 总面积
self.free_area = area # 剩余面积就是当前的总面积
self.item_list = []
def add_item(self,item): # item就是你传过来的家具
print(f"您要添加的是{item.name},占地面积为{item.area}")
if item.area > self.free_area:
print(f"您要添加的家具尺寸太大,剩余面积放不下,不能添加")
else:
# 剩余面积 -= 家具面积
self.free_area -= item.area
# 把当前家具插入列表
self.item_list.append(item.name)
def __str__(self):
# 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
return f"您的房子户型:{self.house_type},总面积{self.area},剩余{self.free_area},现有以下这些家具:{self.item_list}"
ximengsi = HouseItem("席梦思",4) # HouseItem()中参数的个数,要与 def __init__(self,name,area): 中的形参的个数一致
print(ximengsi) # 打印实例化对象 必须和 def __str__(self): 这段代码 两者同时出现,否则报错
shuzuo = HouseItem("书桌",1.5)
print(shuzuo)
yigui1 = HouseItem("衣柜",2)
print(yigui1)
yigui2 = HouseItem("衣柜",2)
print(yigui2)
xt_home = House("一室一厅",40)
print(xt_home)
xt_home.add_item(ximengsi) # add_item()的参数是 家具类 的实例化对象 作为参数
print(xt_home)
xt_home.add_item(shuzuo)
print(xt_home)
xt_home.add_item(yigui1)
xt_home.add_item(yigui2)
print(xt_home)
# House()中参数的个数,要与 def __init__(self,house_type,area):中的参数个数一致,这里的形参是:house_type 和 area
lu_home = House("别墅",400)
print(lu_home)
lu_home.add_item(ximengsi)
lu_home.add_item(shuzuo)
lu_home.add_item(yigui1)
lu_home.add_item(yigui2)
print(lu_home) # print(lu_home) 打印实例化对象 必须和 def __str__(self): 这段代码 两者同时出现,否则报错
en_home = House("一室",3)
print(en_home)
en_home.add_item(ximengsi)
en_home.add_item(shuzuo)
print(en_home)
54、吃鸡案例
python
# 1.biu名、剩余子弹
# 2.biu 能够发射子弹
# 3.biu 装填 装填子弹---增加子弹数量
# 开发biu类
# 1> 判断是否有子弹,没有子弹无法射击
# 2> 使用print提示设计,并输出子弹数量
class Biu:
# 名model、剩余子弹count
def __init__(self,model,count):
self.model = model
self.count = count # 剩余子弹数
# 装填子弹
def add(self,count):
self.count += count # 在原有子弹的基础上,又添加了一些
# 发射子弹
def shoot(self):
# 有子弹才可以使用,没有子弹要提示用户
if self.count <= 0:
print("没有子弹了,请填充")
else:
# 发射子弹,让子弹数 -= 1
self.count -= 1
print(f"{self.model}发射了一发子弹,剩余{self.count}发子弹")
# biu1 = Biu("手biu",15) # 实例化对象 biu1
# biu1.add(5)
# biu1.shoot()
# biu1.add(1)
# biu1.shoot()
# biu1.shoot()
# biu1.shoot()
# 玩家类-- 人名、哪只biu
# 1> 判断是否有biu,没有枪没法冲锋
# 2> 喊一声口号,去冲锋
# 3> 装填子弹
# 4> 射击
class Player:
def __init__(self,name):
self.name = name
self.biu = None # 默认玩家出生时,手里没有biu,None 代表空
def push(self): # 冲锋
# 判断人没有biu
# 判断是否为None空,要用is None
# if self.biu == None
if self.biu is None: # 判断是否为None空
print(f"{self.name}还没有biu,无法冲锋")
else:
print(f"{self.name}冲鸭~~~~~~")
self.biu.add(2)
# 人要拿着biu去发射子弹
self.biu.shoot()
biu1 = Biu("手biu",15)
biu2 = Biu("意大利炮",2)
liyunlong = Player("李云龙")
# 设置实例化对象的biu属性的值为biu2, biu2就是我们上一步生成的意大利炮
# 把biu2这个对象 赋值 给Player的biu属性
liyunlong.biu = biu2
liyunlong.push()
55、私有属性和私有方法
python
class Women:
def __init__(self,name):
self.name = name
# 私有属性
self.__age = 28 # 加了__的 是私有属性 __age 是私有属性
# 私有函数:函数名前面加两个下划线
def __secret(self): # 类的内部可以获取私有属性 __secret()是私有函数
print(f"我的年龄是{self.__age}")
def xiangqin(self): # 类 内部的 公有函数 能获取私有属性
# 类内部可以获取私有属性
print(f"我的年龄是:{self.__age}")
w1 = Women("小张同学")
print(w1.name)
# print(w1.__age) # 私有属性无法在外面直接获取
# w1.__secret() # 私有函数无法在外面无法直接获取
w1.xiangqin()
class Person:
def __init__(self,name):
self.name = name
self.__pwd = "123456"
def __show_pwd(self):
print(self.__pwd) # 类的内部可以使用使用私有属性
def talk_in_sleep(self): # 类的内部可以获取私有属性
# 方法1:
print(f"我的密码是:{self.__pwd}")
# 方法2:
self.__show_pwd() # 类内部可以执行私有函数
en = Person("恩")
# en.__show_pwd() # 私有属性无法在外面直接获取
# print(en.__pwd) # 私有函数无法在外面无法直接获取
en.talk_in_sleep() # 使用 类 内部的 公有函数 间接的 获取私有属性 或 间接的执行私有函数