python_05 类的基础语法、私有属性和私有方法

50、类基础语法

# 猫咪:
# 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、类练习

# 狗:
# 属性: 名字、颜色、年龄
# 行为(函数、方法):吃饭、睡觉

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、跑步类

# 属性:人名字、人体重
# 行为(方法、函数):每次跑步会减重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、家具摆放

# 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、吃鸡案例

# 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、私有属性和私有方法

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()  # 使用 类 内部的 公有函数 间接的 获取私有属性 或 间接的执行私有函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值