封装
面向对象:是一种编程思想,是通过将项目中的数据封装成不同的对象,通过对象和对象之间互相调用完成一定的功能的处理思路,面向对象的编程思想能更好的提高代码的复用性和功能的扩展性。
面向对象的开发步骤(OO:Object Oriented)
OOA:面向对象的需求分析_分析解决问题的过程中,都有什么数据,有什么处理流程,数据就会被封装成对象,处理流程就会被封装成对象的方法
OOD:面向对象的代码设计
OOP:面向对象程序开发
OOT:面向对象的程序测试
面向对象的特征:
从生活中抽象出来的一种解决问题的思路,还原生活
封装:私有化
继承:子承父业
多态:角色扮演
面向对象的特征:封装
面向对象的封装:
- 将零散的数据,包含在一个类型中,统一管理(零散的数据—零碎的东西,箱子-类型)
- 将零散的数据,包含在一个类型中
- 定义了一个商品类型,封装和商品有关系的数据
- 将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的set/get方法来间接访问内部的数据的过程,此时,就可以在set/get方法中,添加条件限制代码!
- 属性私有化,才能让外界不能直接访问
- 在p2和p3中,约定了以一个下划线开头的变量,是私有变量,外界不要直接使用
- p3中,要求两个下划线开头的属性,表示当前类的私有属性,外界不能访问
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_age(self, age):
if age >=0 and age <= 100:
self.__age = age
else:
print("设置的年龄不合法...")
def get_age(self):
return self.__age
def __str__(self):
return "姓名:%s;年龄:%s" % (self.__name, self.__age)p = Person("tom", 12)print(p)p.set_age(1200)print(p)
封装实现的步骤
完成一个类的定义
所有属性私有化
给每个属性提供set/get方法
给get方法上添加@property
注解,就可以让get方法当成属性进行直接取值操作了
其次,@property
同时它会自动生成一个@get方法名称.setter
注解,将@get方法名称.setter
注解写在set方法上,就可以让set方法进行直接赋值操作了
class Person(object):
def __init__(self, name):
self.__name = name;
@property
def get_name(self):
return self.__name
@get_name.setter
def set_name(self, name):
self.__name = name
# 创建对象
p = Person("tom")
print(p.get_name)
p.set_name = "jerry"
print(p.get_name)
# 执行结果
~ tom
~ jerry
注解的同时,还可以给set、get函数重载。这样隐藏了代码底层的实现,调用者可以简易调用。但同时,也让代码的可读性部分降低。毕竟,是相同的函数名,而且还使它变成了属性的操作。
class Person(object):
def __init__(self, name):
self.__name = name;
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
# 创建对象
p = Person("tom")
print(p.name)
p.name= "jerry"
print(p.name)
# 执行结果
~ tom
~ jerry
__slots__
可以封装对象的属性