封装

时间:2019-10-28
本文章向大家介绍封装,主要包括封装使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#在python中用双下划线开头的方式将属性隐藏起来(设置成私有的
'''
类中私有的,只有类内部使用,外部无法访问

封装的真谛在于明确地区分内外,封装的属性可以直接在内部使用,
而不能被外部直接使用,然而定义属性的目的终归是要用,
外部要想用类隐藏的属性,需要我们为其开辟接口,
让外部能够间接地用到我们隐藏起来的属性
'''

# class A:
#     def fa(self):
#         print('from A')
#     def test(self):
#         self.fa()
# class B(A):
#     def fa(self):
#         print('from B')
# b=B()
# b.test()
#在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的


# class A:
#     __x =10 #以单划线开头的就是被隐藏起来,如果以双划线开头则外部调用不可调用
#     def __fa(self):#在定义时就变形为_A__fa
#         print('from A')
#     def test(self):
#         self.__fa()#只会与自己所在的类为准,即调用_A__fa
# class B(A):
#     def __fa(self):
#         print('from B')
#
# b=B()
# # print(A.__dict__)# '_A__x': 10, 所有要想访问到 __x 需要输入的是print(_A__x)
# print(b._A__x) #10
# b.test()

'''
1:封装数据:将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。
'''
# class Teacher:
#     def __init__(self,name,age):
#         # self.__name=name
#         # self.__age=age
#         self.set_info(name,age)
#
#     def tell_info(self):
#         print('姓名:%s,年龄:%s' %(self.__name,self.__age))
#     def set_info(self,name,age): # 既然外部不可以使用,但是内部可以调用,所以写这个函数就是对外开放个接口,让外部去访问
#         if not isinstance(name,str):
#             raise TypeError('姓名必须是字符串类型')
#         if not isinstance(age,int):
#             raise TypeError('年龄必须是整型')
#         self.__name=name
#         self.__age=age
#
#
# t=Teacher('egon',18)
# t.tell_info()
#
# t.set_info('egon',19)
# t.tell_info()

'''
2:封装方法:目的是隔离复杂度
#取款是功能,而这个功能有很多功能组成:插卡、密码认证、输入金额、打印账单、取钱
#对使用者来说,只需要知道取款这个功能即可,其余功能我们都可以隐藏起来,很明显这么做
#隔离了复杂度,同时也提升了安全性
'''
class ATM:
    def __card(self):
        print('插卡')
    def __auth(self):
        print('用户认证')
    def __input(self):
        print('输入取款金额')
    def __print_bill(self):
        print('打印账单')
    def __take_money(self):
        print('取款')

    def withdraw(self):
        self.__card()
        self.__auth()
        self.__input()
        self.__print_bill()
        self.__take_money()

a=ATM()
a.withdraw()

原文地址:https://www.cnblogs.com/luncky/p/11752101.html