python_05

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()  # 使用 类 内部的 公有函数 间接的 获取私有属性 或 间接的执行私有函数
相关推荐
数据智能老司机6 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机7 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机7 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机7 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i7 小时前
drf初步梳理
python·django
每日AI新事件7 小时前
python的异步函数
python
这里有鱼汤8 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook17 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室18 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三19 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试