美文网首页
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-面向对象练习

    面向对象的特性:封装 定义没有初始值的属性 在设置初始值时,如果不知道设置什么值,可以设置为None None关键...

  • 02-面向对象

    类及对象 类的组成成分:属性(成员变量,Field)方法(成员方法,函数,Method) 属性成员变量 vs 局部...

  • 封装-02-面向对象

    首先让我们来了解一下什么是对象? 要了解面向对象我们肯定需要先知道对象到底是什么玩意儿。关于对象的理解很简单,在...

  • 面向对象02-封装

    面向对象02-封装 [TOC] 好处 广义的封装:方法、类、包狭义的封装:类中的属性的封装 封装的具体体现 规范 代码

  • 面向对象02-面向对象三大特性

    面向对象的三大特性 01 封装:提高代码的复用性,降低代码的冗余度,信息隐藏,把方法内部的实现隐藏,不需要关注内部...

  • 面向对象02-对象的创建

    对象的创建 字面量 内置构造函数(Object) 工厂函数 自定义构造函数 Object.create() 01 ...

  • 面向对象练习

    1、定义一个学生类。有属性:姓名、年龄、成绩(语文,数学,英语)[每课成绩的类型为整数] 方法:a. 获取学生的姓...

  • JavaScript高级

    1 面向对象操作 - 回顾对象的基本概念 - 面向对象的相关概念 - 面向对象的特征和操作的实现方式 - 小练习 ...

  • 那些年出现的作业

    Java面向对象之类的练习之模拟计算器 demo Java面向对象之类的练习之ArrayBox封装 demo

  • 02-面向对象语法01

    一、面向对象和面向过程思想 OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想 1.面...

网友评论

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

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