第十二讲 面向对象中
1.特殊方法
- 第一个 name是必须的。
第二个 name是不同的。
第三个 这种添加name的方式非常容易出现错误。
我们希望在创建对象的时候,必须设置name属性。如果不设置对象都无法创建。 - 学习特殊方法:
1.特殊方法什么时候调用?在对象一创建的时候调用,类中的代码块先执行。
2.特殊方法有什么作用? - 类的基本结构:
class 类名(父类)
公共属性
# 对象初始化的方法
def __init__(self,......):
......
# 其他的方法
def method1(self,....)
......
def method2(self,....)
......
2.封装
- 目前我们可以直接通过 对象.属性的方式来修改属性值,这种方式导致对象中的属性可以随意修改 非常不安全。
现在我们需要一种方式来增强数据的安全性
1.属性不能随意修改。(我让你改才能改,我不让你改你就别改了)
2.属性不能改为任意值。
- 封装是什么?
封装是面向对象三大特性之一。
封装指的是隐藏对象中一些不希望被外部访问到的属性或方法。 - 如何隐藏属性?
将对象的属性名,修改成一个外部不知道的名字。
如何获取(修改)对象中的属性。
需要我们提供一个getter和setter方法访问外部属性和修改属性。 - 使用封装,确实增加了类定义的复杂程度,但是它也确保了数据的安全。
1.隐藏了属性名,使调用者无法随意修改对象的属性。
2.增加了getter和setter方法,很好的控制了属性是否是只读的。
如果希望属性只读,则可以直接去掉setter方法。
如果希望属性不能被外部访问,则可以直接去掉getter方法。
3.使用setter方法设置属性,可以增加数据的验证,确保数据的值是正确的。
4.使用getter方法和setter方法获取和设置属性的时候,可以在读取属性和修改属性的时候做一些其他的操作。
- 可以对对象的属性使用双__下划线开头(比较少用)。
双下划线的属性是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过对象访问。
其实隐藏属性只不过是Python自动为属性修改了一个名字。
实际上将改的名字改为了 _类名__属性名 例如__name -> _Person__name。 - 一般我们会将一些私有的属性(不希望被外部访问)以_开头。
3.装饰器property
- @property 将方法转换为相同名称的只读属性。
课堂复习
- 特殊方法:
- init
- 怎么去学习特殊方法
(1)什么时候调用?创建对象的时候调用
(2)有什么作用?初始化属性值
- 封装
- 出现封装的原因:我们需要一种方式来提高数据的安全性。
- getter()方法:获取对象中指定的属性
- setter()方法:用来设置对象中的属性
- __xxx —> __类名__xxx 一般写一个就OK了
- 装饰器property
- 将方法转换为相同名称的只读属性。