小明爱跑步
- 小明 体重
75.0
公斤 - 小明每次 跑步 会减肥
0.5
公斤 - 小明每次 吃东西 体重增加
1
公斤
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)
xiaoming.run()
xiaoming.eat()
xiaoming.eat()
xiaoming.eat()
print(xiaoming)
输出:
小明 爱跑步,跑步锻炼身体
小明 是吃货,吃完这顿再减肥
小明 是吃货,吃完这顿再减肥
小明 是吃货,吃完这顿再减肥
小明 的体重 77.50 公斤
摆放家具
- 房子(House)有 户型、总面积 和 家具列表
- 新房子没有任何的家具
- 家具(HouseItem) 有 名字 和 占地面积,其中
- 席梦思(bed) 占地
4
平米 - 衣柜(chest) 占地
2
平米 - 餐桌(table) 占地
1.5
平米
- 席梦思(bed) 占地
- 将以上三件家具 添加 到房子中
- 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
房子要使用到家具,所以应该先开发家具类。
家具类
class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area
def __str__(self):
return "[%s] 占地面积 %.2f" % (self.name, self.area)
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
print(bed)
print(chest)
print(table)
房间类
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):
# Python 能够自动将一对括号内的代码连接在一起,所以可增加换行来提高可读性
return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
% (self.house_type, self.area,
self.free_area, self.item_list))
def add_item(self, item):
print("要添加 %s" % item)
my_home = House("两室一厅", 60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)
添加家具 add_item
def add_item(self, item):
print("要添加 %s" % item)
if item.area > self.free_area:
print("%s 的面积太大,不能添加到房子中" % item.name)
return
self.item_list.append(item.name)
self.free_area -= item.area
士兵突击
- 士兵 许三多 有一把 AK47
- 士兵 可以 开火
- 枪 能够 发射 子弹
- 枪 装填 装填子弹 —— 增加子弹数量
一个对象的属性可以是另一个对象创建的类。
应该先开发枪类,因为士兵的属性要用到枪。
枪类
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("没有子弹了...")
return
self.bullet_count -= 1
print("%s 发射了 1 颗子弹,剩余子弹 [%d]..." % (self.model, self.bullet_count))
ak47 = Gun("ak47")
ak47.add_bullet(50)
ak47.shoot()
士兵类
假设每一个新兵 都 没有枪。这种情况下,在定义属性时,可以设置为关键字 None
。None
可以赋值给任何一个变量。
class Solider:
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()
X = Solider("X")
X.fire()
X.gun = ak47
X.fire()
身份运算符
身份运算符用于比较两个对象的 内存地址 是否一致,即是否是对同一个对象的引用。
is
:判断两个标识符是不是引用同一个对象,类似于id(x) == id(y)
is not
:类似于id(a) != id(b)
当涉及到 None
的比较时,建议用 is
而不是 ==
。is
与 ==
区别:
is
用于判断两个变量 引用 对象是否为同一个==
用于判断 引用变量的值 是否相等
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a
False
>>> b == a
True