• 寒假自学(五)


    希望所有温柔又可爱的人最后都能幸福❤

    今日总结:

    代码量 200行
    博客量 一篇
    所学时间 4小时左右
    了解到的知识点 python面向对象封装

    明日计划:

    早上 python面向对象继承
    下午 python面向对象继承
    晚上

    具体内容:

    封装

    1. 封装是面向对象编程的一大特点
    2. 属性方法封装到一个抽象的
    3. 外界使用类创建对象,然后让对象调用方法
    4. 对象方法的细节都被封装类的内部

    对象的方法内部,是可以直接访问对象的属性的!

    class Person:
        def __init__(self, name, weight):
            self.name = name
            self.weight = weight
    
        def __str__(self):
            return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight)
    
        def run(self):
            print("%s 爱跑步,跑步锻炼身体" % self.name)
            self.weight -= 0.5
    
        def eat(self):
            print("%s 是吃货,吃完这顿再减肥" % self.name)
            self.weight += 1
    
    
    xiaoming = Person("小明", 75.0)
    
    xiaoming.run()
    xiaoming.eat()
    print(xiaoming)
    
    xiaomei = Person("小美", 45)
    
    xiaomei.eat()
    xiaomei.run()
    print(xiaomei)
    print(xiaoming)
    
    • 对象方法内部,是可以直接访问对象的属性

    • 同一个创建的多个对象之间,属性互不干扰!

    家具案例:

    class HouseItem:
        def __init__(self, name, area):
            self.name = name
            self.area = area
    
        def __str__(self):
            return "[%s] 占地%.2f " % (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 __str__(self):
            return ("户型:%s
    总面积:%.2f[剩余面积:%.2f]
    家具:%s"
                    % (self.house_type, self.area,
                       self.free_area, self.item_list))
    
        def add_item(self, item):
            if item.area > self.free_area:
                print("%s 的面积太大了无法添加" %item.name)
                return
            self.item_list.append(item.name)
            self.free_area -= item.area
            print("要添加 %s" % item)
    
    
    bed = HouseItem("席梦思", 40)
    chest = HouseItem("衣柜", 19)
    table = HouseItem("餐桌", 1.5)
    
    print(bed)
    print(chest)
    print(table)
    # 创建房子对象
    my_home = House("两室一厅", 60)
    my_home.add_item(bed)
    my_home.add_item(chest)
    my_home.add_item(table)
    print(my_home)
    

    一个对象的属性可以是另外一个类创建的对象

    士兵突击演练:

    is是判断两个标识符是不是引用同一个对象

    is not是判断两个标识符是不是引用不同对象

    is用于判断两个变量引用对象是否为同一个

    ==用于判断引用变量的值是否相等

    class Gun:
        def __init__(self, model):
            self.model = model
            self.bullet_count = 0
    
        def add_bullet(self, count):
            self.bullet_count += count
    
        def shoot(self):
            if self.bullet_count <= 0:
                print("[%s] 没有子弹了..." % self.model)
    
                return
            self.bullet_count -= 1
            print("[%s] 突突突...[%d]" % (self.model, self.bullet_count))
    
    
    class Soldier:
        def __init__(self, name):
            self.name = name
            self.gun = None
    
        def fire(self):
            if self.gun is None:
                print("[%s] 还没有枪..." % self.name)
                return
            print("冲啊[%s]" % self.name)
            self.gun.add_bullet(50)
            self.gun.shoot()
    
    
    ak47 = Gun("AK47")
    # ak47.add_bullet(50)
    # ak47.shoot()
    
    # 创建士兵
    xsy = Soldier("肖松月")
    xsy.gun = ak47
    xsy.fire()
    # print(xsy.gun)
    

    python中,并没有真正意义私有

    • 在给属性方法命名时,实际上是对名称做了一些特殊处理,使得外界无法访问到
    • 处理方式:在名称前面加上_类名=>_类名_名称
  • 相关阅读:
    团队冲刺0202
    团队冲刺0201
    第十五周
    第十四周博客
    十三周总结
    软件设计模式13
    软件设计模式12
    软件构造4
    软件设计模式11
    软件设计模式10
  • 原文地址:https://www.cnblogs.com/125418a/p/14280121.html
Copyright © 2020-2023  润新知