美文网首页
02-面向对象练习

02-面向对象练习

作者: 努力爬行中的蜗牛 | 来源:发表于2018-10-29 15:06 被阅读2次
    面向对象的特性:封装
    class Person:
    
        def __init__(self, name, weight):
            # self.属性 = 形参
            self.name = name
            self.weight = weight
    
        def __str__(self):
            return "我的名字叫 %s 体重是 %.2f公斤" % (self.name, self.weight)
    
        def run(self):
            print("%s 爱跑步" % self.name)
    
        def eat(self):
            print("%s 是吃货" % self.name)
    
    
    xiaoming = Person("小明", 75.0)
    xiaoming.run()
    xiaoming.eat()
    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\n总面积:%.2f【剩余:%.2f】\n家具:%s" \
                   % (self.house_type, self.area, self.free_area, self.item_list)
    
        def add_item(self, item):
            if item.area > self.free_area:
                print("家具太大,无法添加")
                return
    
            self.item_list.append(item.name)
    
            self.free_area -= item.area
    
    
    bed = HouseItem("席梦思", 1.5)
    
    my_house = House("三室一厅", 90)
    my_house.add_item(bed)
    
    print(my_house)
    
    定义没有初始值的属性

    在设置初始值时,如果不知道设置什么值,可以设置为None

    • None关键字表示什么都没有
    • 表示一个空对象,没有属性和方法,是一个特殊的常量
    • 可以将None赋值给任何一个变量
    身份运算符

    身份运算符用于判断两个变量的引用地址是否相同。
    判断对象是否为None使用is 身份运算符(is not)

    • is :用于判断两个变量引用对象是否为同一个
    • is not:用于判断两个变量引用对象是否为不同对象
    • ==:用于判断引用变量的值是否相等
    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("子弹发射出去了")
    
    
    class Soldier:
    
        def __init__(self, name):
            # 姓名
            self.name = name
            # 枪-新兵没有枪
            self.gun = None
    
        def fire(self):
            # 判断对象是否为None,使用is身份运算符来判断
            if self.gun is None:
                print("[%s] 还没有抢..." % self.name)
                return
    
            self.gun.add_bullet(30)
    
            self.gun.shoot()
    
    
    # 创建枪对象
    ak47 = Gun("AK47")
    
    # 创建士兵
    xusanduo = Soldier("许三多")
    xusanduo.gun = ak47
    
    print(xusanduo.gun)
    
    私有属性和私有方法

    私有属性和私有方法不能再外接访问,如果非要访问,可以使用类型_属性(方法)

    class Women:
        def __init__(self, name):
            self.name = name
            # 私有变量,前面用两个下划线
            self.__age = 18
    
        # 私有方法
        def __secret(self):
            print("%s 的年龄是 %d" % (self.name, self.__age))
    
    
    xm = Women("小美")
    # 伪私有属性,在外界不能够被直接访问
    print(xm._Women__age)
    # 伪私有方法,在外界不能够被直接访问
    xm._Women__secret()
    

    相关文章

      网友评论

          本文标题:02-面向对象练习

          本文链接:https://www.haomeiwen.com/subject/qedbtqtx.html