1.类的特殊方法
class Person:
name=“葫芦娃”
def speak(self):
print(‘大家好,我是%s’%self.name)
P1 =Person()
P2 =Person()
P1.speak()
P2.speak()
手动向对象中添加属性
在类中有一些特殊的方法(魔术方法)
特殊方法都是以_开头_结尾的方法
特殊方法不需要我们自己调用
特殊方法会在特殊的时候自己调用
凡是双下划线开头的都是特殊方法
1.特殊方法什么时候调用
1.特殊方法有什么作用
可以看出,在对象一创建时就调用了。
下图没有添加指定对象属性就报错
这才对,name要指定
总结上图 init的作用: 初始化属性
2. 类的基本结构就出现了
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)
通过对象.属性更改,使得数据随意被更改,非常不安全。
需要安全措施:
- 属性不能随意修改(让你改才可以改)。
- 属性不能改为任意值。
所以出现了封装
@@@ 封装一 &案例
封装是什么? 它是面向对象三大特性之一
概念:
封装指的是,隐藏对象中一些不希望被外部访问到的属性或方法。
隐藏手段如下:
总结:一般看到self.hidden.name 就别轻易尝试改属性,但也是能改的。
如果修改对象中的属性。
需要我们提供一个getter和setter方法访问属性和修改属性
【定义get方法】
get是封装,需要return
【定义set方法】 set 不需要return
使用封装,确实增加了定义类的复杂程度,但是增加了安全,隐藏了属性,使调用者无法随意修改对象的属性;增加了getter和setter方法,很好的控制了属性是否是只读。
1. 如果希望属性只读,则可以直接去掉setter方法;
2. 如果希望属性不能被外部访问,则可以直接去掉getter方法;
3. 使用setter方法设置属性增加数据的验证,确保数据值是正确的;
4. 使用getter 和 setter 获取和设置属性时,可以做一些其他操作或处理;
看到这个框内,就知道封装,不要随便改别人的封装
非常标准的一个封装类哦:
@@@ 封装二 &案例 让你无法访问,无法改的封装,哈哈哈哈!
但是也不是绝对不能改哦,不绝对,还是留了一道门。
可以对对象的属性使用双下划线开头,这是对象的隐藏属性,它只能在类的内部访问,无法通过对象访问。
隐藏属性只不过时python自动为属性修改的一个名字实际上将改的名字改为了_类名__属性名, 例如__name->_Person__name
一般,我们会将私有的属性不希望被外部访问,这个封装以(单下划线)_开头
4.Property 装饰器
@@作用: 将方法转换为相同方法的只读属性
r.text 是方法, 不加(),否则报错,
用的property装饰器
property 修改,建议用同名哦 如 name
复习回顾:
其中其他几个类的特殊方法
_len
_main
_name