面向对象三大特征之封装

面向对象三大特征之封装

一:组合

  组合:组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象(多个对象放在一起叫组合)
  好处:通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起。

    可以降低代码冗余,降低耦合度,也就是在程序中一个对象将另一个对象作为自己的属性。

class Person:
    def __init__(self,name,sex,age):
        self.name=name
        self.sex=sex
        self.age=age
class Student(Person):
    def __init__(self,name,sex,age,number):
        super().__init__(name,sex,age,)
        self.number=number
    def show_info(self):
        print(self.__dict__)
    def select_course(self):
        print('%s正在逃课。。。'%self.name)
class Phone:
    def __init__(self,phone_number,operator,address):
        self.operator = operator
        self.address = address
        self.phone_number=phone_number
    def call(self):
        print('%s正在拨号中'%self.phone_number)

stu=Student('小仙女','','18','001')
p1=Phone('88888888888','中国移不动','上海浦东')
stu.phone=p1
stu.phone.call()
组合例子

二:封装

  封装:在类的定义的属性前加__开头(没有__结尾)
  总结:
      1. __开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问
      2. 该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增的__开头的属性并不会变形
      3. 如果父类不想让子类覆盖自己的属性,可以在属性前加__开头

通俗版本:

  封装:在程序中指的是将内容隐藏起来,在面向对象中属性和方法可以被隐藏。

  为什么要封装?

    提高安全性(cpu频率,缓冲区大小)

    对于封装属性而言,是通过给访问和修改增加额外d逻辑判断来实现的

  注意:封装不是简单的隐藏。封装是指:隐藏内部实现细节,对外提供访问接口。封装是为了明确区分内部和外部。

  如何使用封装?

    在属性或者方法之前加上两个下划线__就可以将其设置为私有的。python权限只有两种:公开(谁都可以访问的)和私有的(至于哦自己能访问的)。属性的封装通常需要提供相应的设置器和访问器。

    特点:被隐藏的内容在内部是可以访问的,外部无法访问。对于被隐藏的属性,访问和修改都需要通过方法。

class Student:
    def __init__(self,name,age,idCard):
        self.name=name
        self.age=age
        self.__idCard=idCard

    def say_hi(self):
        print('Hello,I am %s,my age is %s'%(self.name,self.age))

    def test(self):
        print(self.__idCard)

    # def get_card(self):    #过渡
    #     return self.__idCard

    def get_card2(self,pwd):
        if pwd=='123':
            return self.__idCard
        else:
            print('抱歉,您没有权限!')

stu=Student('张艺兴','18','320830199901223222')
# stu.test()

idCard=stu.get_card2('111')
print(idCard)
封装例子

  

原文地址:https://www.cnblogs.com/liuxiaolu/p/10134031.html