封装,继承,多态的概念,封装芯片
面向对象编程的三个特点:封装性、继承性和多态性。
属性封装实际上是隐藏数据或函数(包装它们)。
隐藏的目的不是阻止用户使用,而是为这些隐藏的数据打开一个特定的接口,让用户在使用接口之前就可以使用。我们在界面上添加了一些额外的操作。
1.在类定义阶段以双下划线开头的名称是隐藏属性。
不能直接获取后续的类和对象。
2.它并没有真正限制python中的任何代码
如果隐藏的属性真的需要访问,只需要变形就可以了。
_ _变量名_类名_ _变量名
Ps:既然是隐藏的,就不会用畸形的名字去访问,从而失去隐藏的意义。
Python的类机制以双下划线开始隐藏属性(设置为私有),但实际上这只是一个变形操作。在类定义阶段和语法检测期间,类中双滑动开头的所有属性将自动变为“_类名_ _属性名”:
Foo类:
__N=0 #被转换成_ foo _ _ n。
Def __init__(self): #定义函数时,会检测函数语法,所以__开头的属性也会变形。
自我。__x=10 #转化为自我。_Foo__x
Def __f1(self): #变形为_Foo__f1
打印(__f1运行)
F2 (self): #定义函数时会检测函数语法,所以_ _开头的属性也会变形。
自我。__f1() #转化为自我。_Foo__f1()
打印(Foo。__N) # Error AttributeError:类Foo没有属性__N
obj=Foo()
打印(对象。__x) #报告错误属性错误:对象obj没有属性__x这种变形需要注意:
1.在类外不能直接访问双滑线开头的属性,但是可以在知道类名和属性名的情况下拼写出名称:_ class name _ _ attribute,然后就可以访问了,比如Foo。_A__N,所以这个操作并没有严格限制外部访问,只是语法变形而已。
福。__词典_ _
mappingproxy({. _Foo__N: 0,})
obj。__词典_ _
{_Foo__x: 10}
福。_Foo__N
0
obj。_Foo__x
10
obj。_Foo__N
02.在类内,可以直接访问双滑线开头的属性,比如self。__f1(),因为类中双滑线开头的属性在类定义阶段是统一变形的。
对象f2()
__f1运行3。变形操作只在类定义阶段发生一次,类定义后的赋值操作不会变形。
福。__M=100
福。__词典_ _
mappingproxy({. __M: 100,})
福。__M
100
obj。__y=20
obj。__词典_ _
{__y: 20, _Foo__x: 10}
obj。__y
20开放接口定义了使用的属性,所以隐藏不是目的。
隐藏数据属性会隐藏数据,这限制了数据在类外的直接操作。那么应该在类内提供相应的接口,以允许在类外间接操作数据。可以将附加逻辑附加到接口上,以严格控制数据的操作。
班级学生(对象):
__school=清华大学
def __init__(自己,姓名,年龄):
自我。__name=name
自我。_ _年龄=年龄
#设置专门的通道(接口)访问学生数据。
定义检查信息(自身):
打印(“”)
学生姓名:%s
学生的年龄:%s
%(自我。__name,self。_ _年龄))
#设置专门的通道(接口)修改学生数据。
定义集合信息(自己,姓名,年龄):
如果len(name)==0:
打印(“用户名不能为空”)
返回
如果不是isinstance(age,int):
打印(“年龄必须是一个数字”)
返回
自我。__name=name
自我。_ _年龄=年龄
stu1=学生(杰森,18岁)
1.stu1.set_info(,我大)
隐藏函数属性的目的是隔离复杂性,比如ATM程序的取款功能。该功能由许多其他功能组成,如插卡、身份认证、货币输入、收据打印、货币提取等。对于用户来说,只需要开发提现功能接口,其他功能可以隐藏。
自动柜员机类别:
.def __card(self): #插入卡
.打印(“插入卡片”)
.def __auth(self): #身份验证
.打印(“用户验证”)
.def __input(self): #输入金额。
.打印(“输入取款金额”)
.def __print_bill(self): #打印收据
.打印(“打印账单”)
.def __take_money(self): #取钱
.打印(“取款”)
.定义取款(自助):#取款功能
.自我。_ _卡()
.自我。__auth()
.自我。__input()
.自我。__print_bill()
.自我。__take_money()
.
obj=自动柜员机()
obj . retract()总结了隐藏属性和开放接口,其本质是明确区分内部和外部,一个类的内部可以修改包内部的内容,而不影响外部调用方的代码;类外只需要一个接口。只要接口名称和参数不变,无论设计者如何更改内部实现代码,用户都不需要更改代码。这为合作提供了良好的基础。只要接口的基本契约保持不变,代码的修改就不是问题。
伪装性能身体质量指数指数是用来衡量一个人的体重和身高对健康影响的指标,计算公式为
身体质量指数(身体质量指数)=体重(公斤)身高2(米)
例:70 kg (1.75 1.75)=22.86身高或体重是不断变化的,所以每次要查身体质量指数都需要计算一下。然而,很明显,身体质量指数听起来更像一个特性,而不是一个功能。为此,Python专门提供了一个decorator属性,可以将类中的函数“伪装”成对象的数据属性。当一个对象访问这个特殊属性时,它将触发函数的执行。
班级人员:
def __init__(自己,姓名,体重,身高):
self.name=name
自重=重量
自我高度=高度
@属性
def身体质量指数(自我):
返回自重/(自身高度** 2)
p1=人(“杰森”,78,1.83)
res=p1。身体质量指数()
转载请联系作者获得授权,否则将追究法律责任。评论0发表评论。
wx616d1c2b62cca
2022-09-16 09:50
博主你好,这篇文章写的挺好,但是标题太短,会影响推荐和搜索引擎收录。下次请注意文章标题~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。