• 20181217(组合,封装)


    20181217

    一、面向对象的精髓

    将数据和处理数据的代码绑定,成了一个对象。 只要获取到对象,相应的数据和方法就有了。

     

    二、组合

    组合:一个对象的属性来自于另外一个类(或多个类)的对象(或多个对象),称之为组合。 组合可以使这个对象获得另外一个对象的所有属性和功能。组合是对象之间的一种关系。 优点:也可以降低代码的冗余,相比较继承,耦合度更低。

    class Person:
       def __init__(self,name,sex):
           self.name = name
           self.sex = sex


    class Student(Person):
       def __init__(self,name,sex,number):
           super().__init__(name,sex)
           self.number = number

    class Phone:
       def __init__(self,phonenumber):
           self.phonenumber = phonenumber

       def phonecall(self):
           print("%s 打电话" %self.phonenumber)

    创建两个对象:
    s = Student("kevin","male","007")
    p = Phone("18855555555")
    为对象s添加phone属性,属性指向另一个对象
    s.phone = p
    对象s通过phone属性可以调用对象p的方法(函数)
    s.phone.phonecall()
    print(s.__dict__)
    输出结果:
    18855555555 打电话
    {'name': 'kevin', 'sex': 'male', 'number': '007', 'phone': <__main__.Phone object at 0x00000160C8A6BD30>}

     

    三、封装

    什么是封装: 在程序中,封装指的是将内容隐藏起来(在面向对象的编程中,隐藏的是属性和方法)。 注意:封装绝不是单纯的隐藏,封装是隐藏内部实现的细节,对外提供使用接口。

    为什么要封装: 封装是为了明确区分内部和外部。 可以提高安全性(比如cpu频率,缓冲出大小)对于封装属性而言,是通过给访问和修改增加额外的逻辑判断实现的。

     

    如何使用封装: 在属性或方法名称前加上两个下划线,就可以将其设置为私有属性/方法。 python中权限只有两种,公开和私有。 属性的封装,通常需要提供相应的设置器和访问器。

    封装的特点: 被隐藏的内容,在内部是可以访问的,在外部是不可以访问的。

    class Person:
       def __init__(self,name,sex,idcard):
           self.name = name
           self.sex = sex
           self.__idcard = idcard

       def say_hi(self):
           print("hello,I am %s" %self.name)
       def idcard(self):
           print("my idcard is %s" %self.__idcard)

       def get_idcard(self,pwd):  # 可以使用方法,将内部封装的内容返回出去
           if pwd == 123:
               return self.__idcard
           else:
               return "滚"

       def set_idcard(self,pwd,new):  # 可以使用方法,将内部封装的属性进行修改
           if pwd == 123:
               self.__idcard = new
               return self.__idcard
           else:
               return "滚"

    p = Person("egon","male","3456789987654")
    p.say_hi()
    p.idcard()  # 通过函数可以访问(函数中如果有)
    # p.__idcard # 是无法访问的
    print(p.get_idcard(123))   # 既实现了隐藏,又提供了访问的接口(还可以验证)
    print(p.set_idcard(123,"xxxxxxxxxxx"))   # 修改方法
  • 相关阅读:
    你的项目中使用过哪些JSTL标签?
    什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?
    MVC的各个部分都有那些技术来实现?如何实现?
    request.getAttribute()和 request.getParameter()有何区别?
    JS中如何将页面重定向到另一个页面?
    比较 SpringSecurity 和 Shiro?
    shiro有哪些组件?
    Apache Shiro 的三大核心组件?
    springmvc和struts2有哪些区别?
    解耦使用的设计模式:
  • 原文地址:https://www.cnblogs.com/realadmin/p/10134054.html
Copyright © 2020-2023  润新知