本章节的内容常常在面试题中出现,大家根据本文的思路可以很好的掌握。
文章目录
封装浅层次
数据角度讲,将一些基本数据类型复合成一个自定义类型。
封装数据:
敌人(姓名,血量,攻击力,防御力)
二维向量(x,y)
优势:
1、更符合人类的思考方式。
2、将数据与对数据的操作整合在一起。
行为角度讲,向类外提供必要的功能,隐藏实现的细节。
封装行为:
二维列表助手类DoublelListHelper(获取多个元素get_elements
向量(向左╱向右,求模长,求方向等)
优势:以”模块化的方式进行编程,更可以集中精力设计、组织、指挥多个类协同工作。
一、使用方法,封装变量
#使用方法,封装变量
class Wife:
def __init__(self,name,age, weight):
self.name = name
# 本质:障眼法
#实质:实际将变量名改为︰_类名__age
# self.__age = age
self.set_age(age)
# self.__weight = weight
self.set_weight(weight)
# 提供公开的读写方法
def get_age(self):
return self.__age
def set_age(self,value):
if 21<= value <= 31:
self.__age =value
else:
raise ValueError("我不要")
# 提供公开的读写方法
def get_weight(self):
return self.__weight
def set_weight(self,value):
if 40<= value <= 80:
self.__weight =value
else:
raise ValueError("我不要")
"""
#不建议下面的做法
w01 = Wife("铁锤公主",87,87)
#重新创建了新实例变量(没有改变类中定义的_age)
# w01.__age = 107
#修改了类中定义的私有变量
w01._Wife__age = 107
#__dict__:python内置变量,存储对象的实例变量
print(w01.__dict__)
"""
w01 = Wife("铁锤公主",30,57)
w01.set_age(25)
w01.set_weight(45)
print(w01.get_age())
print(w01.get_weight())
#25
#45
练习:
定义敌人类(姓名,攻击力10–50,血量100–200)
创建一个敌人对象,可以修改数据,读取数据。
class Enemy:
def __init__(self,name,attack,hp):
self.name = name
self.set_attack(attack)
self.set_hp(hp)
def set_attack(self,value):
if 10 <= value <= 50:
self.__attack = value
else:
raise ValueError("不行")
def get_attack(self):
return self.__attack
def set_hp(self,value):
if 100 <= value <= 200:
self.__hp = value
else:
raise ValueError("不行")
def get_hp(self):
return self.__hp
enemy = Enemy("灭霸",20,100)
enemy.set_attack(30)
print(enemy.get_attack(