面向对象的特性:封装
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()
网友评论