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方法中,提供限制条件!

  • 12
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值