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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342