参考链接:
https://blog.csdn.net/weixin_45393094/article/details/105306788
https://www.cnblogs.com/nevermore29/p/10843981.html
面向对象三大特性
封装、继承、多态
封装
封装的意义
- 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;
- 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;
- 对类的属性和方法增加访问权限控制。
私有权限
- 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
- 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问;
- 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。
什么是类的内部事情?
什么时候不想让子类访问到内容?
如何修改私有属性的值
对于修改对象的属性值,有两种方法:
- 对象名.属性名 = 数据 -----> 直接修改
- 对象名.方法名() ----> 间接修改
私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。
多态
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
- DuckType: 虽然我想要一只"鸭子",但是你给了我一只鸟。 但是只要这只鸟走路像鸭子,叫起来像鸭子,游泳也像鸭子,我就认为这是鸭子。
- Python的多态,就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有就认定合适,而不关心对象的类型是否正确。
通俗解释:Python并不关心你是否继承了父类,也不关心你对类属性和方法的参数中类型是否一致,弱化了对继承和参数类型的限制。
换种说法:多态的概念在python中被“同化”了,尽管了弱化了对继承和参数类型的限制,但多态依然在python中实现了
多态的好处
- 增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal) - 增加了程序的可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
更多理解
“开闭”原则 https://www.liaoxuefeng.com/wiki/1016959663602400/1017497232674368
类属性和实例属性
类属性:就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似
公有的类属性:在类外可以通过类对象和实例对象访问
相关验证实验可访问参考链接中的内容
- 如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。
- 如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。
类方法和静态方法
类方法:
@classmethod
类方法,方法中的self是类本身,调用方法时传的值也必须是类的公有属性,就是说类方法只能操作类本身的公有字段
静态方法:
@staticmethod
静态方法,通过类直接调用,不需要创建对象,不会隐式传递self
相关验证实验可访问参考链接中的内容