9 python 封装
2021-07-05 08:05
标签:私有 type card 电视 输入 err inpu 入口 照相 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) 这种自动变形的特点: 这种变形需要注意的问题是: 1、这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N 2、变形的过程只在类的定义是发生一次,在定义后的赋值操作,不会变形 3、在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的 将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。 其他例子: 提示:在编程语言里,对外提供的接口(接口可理解为了一个入口),可以是函数,称为接口函数,这与接口的概念还不一样,接口代表一组接口函数的集合体。 9 python 封装 标签:私有 type card 电视 输入 err inpu 入口 照相 原文地址:https://www.cnblogs.com/foremostxl/p/9599320.html1、基本概念
#其实这仅仅这是一种变形操作
#类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式:
class A:
__N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N
def __init__(self):
self.__X=10 #变形为self._A__X
def __foo(self): #变形为_A__foo
print(‘from A‘)
def bar(self):
self.__foo() #只有在类内部才可以通过__foo的形式访问到.
#A._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形
正常情况下:
#正常情况
>>> 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()
from B
#-----------------------------------------------
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()
结果:from A2、封装不是单纯意义的隐蔽
2.1、封装数据
class Teacher:
def __init__(self,name,age):
self.__name=name
self.__age=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.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()
输出结果:
插卡
用户认证
输入取款金额
打印账单
取款
3.特性(property)