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'))
    封装实例
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    echarts图形的位置布局如何调整
    IDEA在写springboot项目的时候遇见的问题:Caused by: java.lang.NoClassDefFoundError: com/fasterxml/classmate/TypeResol
    【学习总结】linux命令:ps -ef | grep xxxserver | grep -v grep|wc -l
    linux中管道符“|”的作用 find的作用
    linux系统中的管道“|”命令的作用
    JDBC管理事务
    SQL注入的问题&使用PreparedStatement对象防止SQL注入
    JDBC对象详解DriverManager&Connection&Statement
    MySQL安装&使用DataGrip连接数据库
    红黑树(R-B树,对称二叉B树)
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10137459.html
Copyright © 2011-2022 走看看