1.类的特殊方法

class Person:
name=“葫芦娃”
def speak(self):
print(‘大家好,我是%s’%self.name)
P1 =Person()
P2 =Person()
P1.speak()
P2.speak()
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
手动向对象中添加属性
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
在类中有一些特殊的方法(魔术方法)
特殊方法都是以_开头_结尾的方法

特殊方法不需要我们自己调用
特殊方法会在特殊的时候自己调用
凡是双下划线开头的都是特殊方法

1.特殊方法什么时候调用

1.特殊方法有什么作用

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器
可以看出,在对象一创建时就调用了。
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器
下图没有添加指定对象属性就报错
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
这才对,name要指定
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

总结上图 init的作用: 初始化属性

2. 类的基本结构就出现了

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

3.封装的引入

尝试定义一个车类
#属性 name color
#方法 run()laba()
class Car():
def init(self,name,color):
self.name=name
self.color=color
def run(self):
print(’******’)
def laba(self):
print(’******’)
c=Car(‘大奔’,‘白色’)
print(c.name,c.color)
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

通过对象.属性更改,使得数据随意被更改,非常不安全。
需要安全措施:

  1. 属性不能随意修改(让你改才可以改)。
  2. 属性不能改为任意值。
    所以出现了封装

@@@ 封装一 &案例

封装是什么? 它是面向对象三大特性之一
概念:
封装指的是,隐藏对象中一些不希望被外部访问到的属性或方法。
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
隐藏手段如下:

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器
总结:一般看到self.hidden.name 就别轻易尝试改属性,但也是能改的。

如果修改对象中的属性。
需要我们提供一个gettersetter方法访问属性和修改属性

【定义get方法】

python 基础_ 类的特殊方法、封装二方法、Property 装饰器
get是封装,需要return
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

【定义set方法】 set 不需要return

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

使用封装,确实增加了定义类的复杂程度,但是增加了安全,隐藏了属性,使调用者无法随意修改对象的属性;增加了getter和setter方法,很好的控制了属性是否是只读。

1. 如果希望属性只读,则可以直接去掉setter方法;
2. 如果希望属性不能被外部访问,则可以直接去掉getter方法;
3. 使用setter方法设置属性增加数据的验证,确保数据值是正确的;
4. 使用getter 和 setter 获取和设置属性时,可以做一些其他操作或处理;

看到这个框内,就知道封装,不要随便改别人的封装
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

非常标准的一个封装类哦:
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

@@@ 封装二 &案例 让你无法访问,无法改的封装,哈哈哈哈!
但是也不是绝对不能改哦,不绝对,还是留了一道门。

可以对对象的属性使用双下划线开头,这是对象的隐藏属性,它只能在类的内部访问,无法通过对象访问。

隐藏属性只不过时python自动为属性修改的一个名字实际上将改的名字改为了_类名__属性名, 例如__name->_Person__name
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

python 基础_ 类的特殊方法、封装二方法、Property 装饰器
一般,我们会将私有的属性不希望被外部访问,这个封装以(单下划线)_开头

python 基础_ 类的特殊方法、封装二方法、Property 装饰器

4.Property 装饰器

@@作用: 将方法转换为相同方法的只读属性
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
r.text 是方法, 不加(),否则报错,
用的property装饰器
python 基础_ 类的特殊方法、封装二方法、Property 装饰器
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

property 修改,建议用同名哦 如 name
python 基础_ 类的特殊方法、封装二方法、Property 装饰器

复习回顾:

其中其他几个类的特殊方法
_len
_main
_name

相关文章: