python 面向对象-封装

封装演示01

'''

类的封装可有数据封装,方法封装,属性封装

'''

#数据的封装

class User:

    def __init__(self,name,age):

        self.name=name

        self.age=age
#方法封装

class User:

    def __init__(self,name,age):

        self.name=name

        self.age=age

    def get_name(self):

        return self.name

#只是方法的封装,通过定义方法,让对象调用方法得到数据

前面两种封装方法对于数据的安全保护不够强烈,应为对象可以直接通过objeect.name='like',之类的办法修改,获得类中的数据,外界对象可以直接获得类中的数据

属性的封装有两种

一种是规则的封装
通过在变量前加一个下划线,例如:self._name=name,这种封装和前面的数据封装是没有太大区别的,只是通过行业的规则进行限制

另一种是通过方法封装属性如下代码

class User:

    def __init__(self,name,age):

        self.__name=name

        self.__age=age

    def get_name(self):

        return self.__name

    def set_name(self,name):

        self.__name=name

    def get_age(self):

        return self.__age

    def set_age(self,age):

        '''

    可以再set_age中添加限制条件进行数据的限制

        '''

        self.__age=age

u=User('tom',60)

print(u.get_name(),u.get_age())

面向对象的封装:

  1. 数据封装

原始数据存在的问题

表示一个用户[账号、密码、性别、昵称]
username = "admin"
password = "123"
gender = "男
nickname = "小王"

四个变量互相没有关系~人为规定了 他们四个表示的是一个用户对象
这四个变量,随时可能被破坏他们的关系[username=True]
原始多个变量表示一个对象的方式:不稳定因素太大!

组合数据类型

表示一个用户,可以将多个数据存在一个组合数据类型变量中

user = {
"username": "admin",
"password": "123",
"gender": "男",
"nickname": "小王"
}
多个变量,被一个组合数据类型[字典]包装在一起
完成了多个数据之间的关联
他们依然不稳定!
user2 = {
"account": "admin",
"userpass": "123",
"sex": "男",
"nickname": "小王"
}

面向对象:

通过类型规范定义;通过对象包装数据
通过类型定义~一个数据中,需要包含那些数据[强制]
表示数据的时候~通过类型创建具体的对象,包装具体的数据

class User:

    def __init__(self, username, password):

    self.username=username

    self.password=password

user1 = User("admin", "admin")

user2 = User("manager", "123123")

任何人创建的用户数据,格式和表示都是一模一样的!
       这样的数据规范在面向对象中,是强制规定的!
        软件开发-> 解决问题-> 处理数据-> 增删改查
        数据如果不一致->软件不稳定
        数据的一致性:软件开发的核心:面向对象提供了这样的数据基础!
面向对象:第一个封装:封装数据,将程序中需要的数据
        按照统一的格式封装在类型的内部,通过该类型的对象
        包装使用数据!
        类型:声明数据格式
        对象:包装使用数据
面向对象:第二个封装:封装行为[方法]
       常规开发模式下,要处理一个功能,python一般都会定义成一个函数
        要处理功能的函数:
                (1) 和具体的某个功能有关系;获取当前系统时间
                (2) 和具体的某个数据有关系;“用户”登录
原始操作模式[基础语法代码]--没有函数,功能靠每一行代码去直接执行
耦合度太高!复用性太差!性能操作太low!开发效率太低!

函数式编程[面向过程编程]--出现了封装可复用代码的函数
    耦合度较低、复用性提升、性能操作提升,开发效率提高
   函数太多,不利于管理!
    界面函数、功能函数...
面向对象开发[函数和方法混合开发]
       处理某个独立功能-> 封装成一个独立的函数
        获取系统当前时间--封装成一个具体的功能函数
        处理和某个数据关联的功能-> 功能代码封装成函数,讲函数封装在类型中[方法]
        处理具体功能的方法,就和对应的数据强制关联,方便统一管理维护

models.py[数据模型模块]

class User:

    def __init__(self, name, age, gender, birthday, create_time):

        self.name = name

        self.age = age

         self.gender = gender

        self.birthday = birthday

        self.create_time = create_time

    def show_info(self):
        pass

    def get_current_time():

        # 获取当前系统时间,转换成字符串current_time
        return current_time

u = User("小王", 18, "男", '2000-01-01', get_current_time())

面向对象:第三个封装[重点重点重点:封装属性]
    属性是属于对象的特征,对象的特征是属于对象的数据
    对象的数据~一般不让外界直接访问!
   1. 面向对象中,数据存在的问题!数据安全性问题
        对象属性可以直接被操作
       走在大街上~,你的私人物品被特殊职业人拿走了!
        解决方案:所有私人物品必须征得本人同意[行为]
        对象的属性操作,必须通过方法操作
    2. 通过方法限制属性的访问,提高属性的安全性
      通过项目的规范,规定了一个下划线开头的属性
      是属于对象的私有属性,不能在类型的外部调用!
      这仅仅是一个规范,总有一些人~破坏这样的规范[新手,不知情]
      规范行的东西,约束太差!导致项目开发效率较低!
    3. 通过语法限制,让属性私有化,不让外界直接访问
        python中规定了,两个下划线开头的属性是私有的
        语法上外界不能直接访问
依然存在问题:但是已经不是问题!
作为一个有经验的开发人员,你要知道怎么操作私有属性
知道:知道规范怎么操作;知道破坏性的语法怎么操作!

总结封装:

在python中,封装按照如下步骤进行操作
   (1) 定义类型,所有属性私有化[双下划线开头]
    (2) 每个属性提供set/get方法[赋值/取值]
命名规范:赋值:set_属性名称(..)
取值:get_属性名称(..)
    (3) 在get/set方法中,提供限制条件!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。