寒假自学(五)
希望所有温柔又可爱的人最后都能幸福❤
今日总结:
代码量 | 200行 |
---|---|
博客量 | 一篇 |
所学时间 | 4小时左右 |
了解到的知识点 | python面向对象封装 |
明日计划:
早上 | python面向对象继承 |
---|---|
下午 | python面向对象继承 |
晚上 | 无 |
具体内容:
封装
- 封装是面向对象编程的一大特点
- 将属性和方法封装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被封装在类的内部
在对象的方法内部,是可以直接访问对象的属性的!
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\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("%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
中,并没有真正意义的私有
- 在给属性、方法命名时,实际上是对名称做了一些特殊处理,使得外界无法访问到
- 处理方式:在名称前面加上
_类名
=>_类名_名称