7.26学习 面向对象(中)

封装

面向对象:是一种编程思想,是通过将项目中的数据封装成不同的对象,通过对象和对象之间互相调用完成一定的功能的处理思路,面向对象的编程思想能更好的提高代码的复用性和功能的扩展性。

面向对象的开发步骤(OO:Object Oriented)

OOA:面向对象的需求分析_分析解决问题的过程中,都有什么数据,有什么处理流程,数据就会被封装成对象,处理流程就会被封装成对象的方法
OOD:面向对象的代码设计
OOP:面向对象程序开发
OOT:面向对象的程序测试

面向对象的特征:

从生活中抽象出来的一种解决问题的思路,还原生活
封装:私有化
继承:子承父业
多态:角色扮演

面向对象的特征:封装

面向对象的封装:
  1. 将零散的数据,包含在一个类型中,统一管理(零散的数据—零碎的东西,箱子-类型)
  • 将零散的数据,包含在一个类型中
  • 定义了一个商品类型,封装和商品有关系的数据
  1. 将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的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__可以封装对象的属性

你可能感兴趣的:(7.26学习 面向对象(中))