zoukankan      html  css  js  c++  java
  • 组合与封装

    面向对象的精髓:是将数据和处理数据的代码绑定在一起,成为一个对象

              只要获取到对象,相应的数据和方法都有

     1 class Mysql:
     2     def __init__(self,host,port,db,charset):
     3         self.host = host
     4         self.port = port
     5         self.db = db
     6         self.charset = charset
     7 
     8     def exc2(self,proc_name):
     9         conn=connect(self.host,self.port,self.db,self.charset)
    10         conn.call_proc(proc_name)
    11         return 123
    12 
    13     def exc1(self,sql):
    14         conn=connect(self.host,self.port,self.db,self.charset)
    15         conn.execute(sql)
    16         return 123
    17 
    18 
    19 my1 = Mysql("127.0.0.1",3306,"mydb","utf-8")
    20 
    21 my1.exc1("select *from table1")
    22 my1.exc2("名字")
    面向对象

    什么是组合?  多个对象放在一起叫做对象 组合可以降低代码冗余

           在程序中 一个对象将另一个对象作为自己的属性

          组合是 对象之间的关系

     1 '''
     2 用代码 描述乐队   一个乐队有其他多个乐器组成 主唱
     3 乐队可以演奏歌曲
     4 主唱是歌手类  会唱歌 ,有名字
     5 钢琴类   能弹奏,有价格,牌子
     6 '''
     7 class Band:
     8     def __init__(self,name,singer,piano):
     9             self.name = name
    10             self.singer = singer
    11             self.piano = piano
    12 
    13     def play_music(self):
    14             print('hello 我们是%s组合,请欣赏演出'%self.name)
    15             self.singer.singing()
    16             self.piano.playing()
    17 
    18 class Singer:
    19        def __init__(self,name)
    20             self.name = name
    21 
    22        def singing(self):
    23             print("你好我是主唱 ",self.name)
    24 
    25 class piano:
    26         def __init__(self,price,brand)
    27             self.prince = price
    28             self.brand = brand
    29 
    30         def playing(self):
    31             print("你好我是钢琴手 ",self.name)
    32 
    33 singer = Singer('alan')
    34 p = piano('10000','bleak') 
    35 b = Band('FY',singer,p)
    36 b.playing_music()
    37    
    组合示例

    面向对象三大特征之封装:

      什么是封装? 封装是指隐藏内部实现细节,对外提供使用接口

            封装不是单纯的隐藏

      为什么要封装? 1.提高安全性

             2.封装是为了明确区分内部与外部

             3.对于封装而言是为了隔离复杂度

      如何使用?  在属性或方法名称前加上双下划线

           python中权限只有两种,公开的(任何人都可以访问)和私有的(只能自己访问)

           属性的封装,通常需要提供相应的设置器和访问器

             对于被隐藏的属性  访问和修改都需要通过方法 get用于获取  set用于设置(也称之为设置器和访问器)

      什么时候使用?

           当一个类中有某些属性和方法,不应该让外界直接访问,就应该对其进行封装

      封装的实现原理

           本质上python并没有强制限制访问,而是通过语法转换来实现的封装

           会将__开头的属性转换为_类名__属性名

      封装的特点

           被隐藏的内容在内部可以直接访问,但是在外部无法直接访问

           子类无法覆盖和访问父类的私有属性和方法

     1 class Student:
     2     def __init__(self,name,sex,age,id_card):
     3         self.name = name
     4         self.sex = sex
     5         self.age = age
     6         self.__id_card = id_card
     7 
     8     def get_idCard(self,pwd):
     9         if pwd == '9999':
    10             return self.__id_card
    11         else:
    12             print('无权限')
    13     def set_idCard(self,pwd,new_idCard):
    14         if pwd == '9999':
    15             self.__id_card = new_idCard
    16         else:
    17             print('无权限')
    18 
    19 stu = Student('alan','man',20,'963852741')
    20 stu.get_idCard('9999')
    21 print(stu.get_idCard('9999'))
    22 stu.set_idCard('9999','123456789')
    23 print(stu.get_idCard('9999'))
    封装实例
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10137459.html
Copyright © 2011-2022 走看看