第12节- 面向对象二(魔法方法/封装/装饰器方法)

一、特殊方法:

在这里插入图片描述

在类中可以定义一些特殊方法,这些方法形如__xxx__()这种形式,特殊方法(魔法方法) 不需要我们自己去调用,会在特定时候自动调用
在这里插入图片描述
如上图:p1 = Person() 解释器默认会调用执行一次__init__()方法
p1.init() 再次调用__init__()方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、封装

(1)封装只是一个相对封装的效果,它是告诉你的协同开发者不要轻易修改里面的属性或方法**(只是业界约定俗成的规则)**
(2)封装是面向对象的三大特性之一

2.1 hidden+get+set方式进行声明封装

一般情况下,使用hidden_开头的属性都是私有属性,没有特殊情况下不要修改私有属性
在这里插入图片描述
如上图,仍然可以通过普通方式就行修改,但一般是在征得别人同意后约定通过get和set方法进行修改,如下图:
在这里插入图片描述

2.2 ‘__属性名’方式进行声明封装

(1)一般情况下,使用双下划线__开头的属性都是私有属性,没有特殊情况下不要修改私有属性
(2)“双下划线__”声明的封装相当于绝对封装,隐藏属性只能在类的内部访问,外部无法通过对象直接访问。外部需要通过“实例. _ Person_ _name”方法或者类中定义的“get/set”方法来进行修改(相当于进行了加密)
在这里插入图片描述
如上图:解释器决绝通过“_属性名”方式直接访问
在这里插入图片描述
如上图:“实例. _ Person
_name”方法可正常访问,本程序中“__属性名”方式因为无法正常直接访问类内部属性,所以此处仅仅是又给p1重新定义了一个双下划线的属性
在这里插入图片描述

2.3 ‘_属性名’方式进行声明封装

(1)一般情况下,使用单下划线_开头的属性都是私有属性,没有特殊情况下不要修改私有属性
(2)单下划线+名称:平时常用的封装方法,类似hidden(get/set/_xxx都可修改),在业界声明为私有属性,不希望别人去修改它
在这里插入图片描述

2.4 封装小结

• 封装是指隐藏类对象中一些不希望被外部所访问到的属性或方法
• 在类对象内部可提供一个getter()和setter()方法使外部可以访问到属性(适用于任何一种封装方法)
• getter() 获取对象中指定的属性
• setter() 用来设置对象指定的属性
• 使用封装,增加了类的定义的复杂程度,但是它也确保了数据的相对安全

  1. 隐藏属性名,使调用这无法随意的修改对象中的属性
  2. 增加了getter()和setter()方法,很好控制属性是否是只读的

三、装饰器方法

1.无装饰器下的方法使用:
在这里插入图片描述
2、增加@property装饰器后:
在这里插入图片描述
需要去掉方法后面的(),使得方法的使用更加贴近封装之前的用法:
在这里插入图片描述
3、增加@property装饰器后,后面的方法已具备property属性
在这里插入图片描述
4、通过property中的setter属性,获得与非封装类似的属性变更方法(注意:不是传参方式了
在这里插入图片描述
如上图:(1)使得name具备了property属性,(2)使用的是property属性的其中一个方法setter,因此要求(2)中带装饰器属性的name与(1)中被装饰器扩展的函数名name必须相同;但是(1)和(2)中的函数名可以不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值