面向对象编程
Posted wang-xing-hao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程相关的知识,希望对你有一定的参考价值。
面向对象开发
- 优点是解决了程序的拓展性。对某一个对象单独修改,会立刻反应到整个体系中。
- 缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精致的预测问题和处理问题和处理流程与结果
面向对象的应用场景
- 需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方
了解一些名称
- 类:具有同一特征的一类事物
- 对象/实例:具有的某一个事物
- 实例化:类--->对象的过程
类成员
- 静态变量
- 类中的变量是静态变量
- 对象中的变量只属于对象本身,每个对象都属于字节的空间来储存对象变量
- 绑定方法
组合
- 一个类的对象是另一个类对象的属性
- 当类之间有显著不同,并且较小的类是较大的类所需的组件时,用组合比较好
继承
继承语法
继承 -- 需要解决代码的重复
B继承A,A是父类,B是子类
A是父类 基类 超类
B是子类 派生类
继承的用法
子类中可以使用父类中的方法 静态变量
当子类和父类的方法重名的时候,我们只会用子类的方法,而不会去调用父类的方法
子类想要调用父类的方法的同时还想执行自己的同名方法
- 在子类的方法中调用父类的方法:父类名.方法(self)
父类和子类方法的选择:
- 单继承
- 子类的对象,如果去调用方法,永远优先调用自己的
- 如果自己有,用自己的
- 如果自己没有,用父类的
- 自己有 还想用父类的:直接在子类方法中调用父类的方法 父类名.方法名(self)
- 多继承
- 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的先寻找
- 单继承
类的继承顺序
- 在python3中 所有的类都继承object类,都是新式类
- python2中 不继承object的类都是经典类,继承object类的就是新式类了
单继承方面:无论是新式类还是经典类都是一样的
多继承:
- 在走到一个点,下一个点既可深度走,也可以从广度走的时候,总是先走广度,再走深度,广度优先
- 在经典类中,都是深度优先,总是在一条路走不通之后在换一条路,走过的点不会再走
多态
- 一个类表现出的多种形态
- 在python中处处是多态
- 如果想让两个类型的对象都可以传,那么必须让两个类继承同一个父类,在制定类的时候使用父类来指定
反射
- hashttr:判断某个函数或者变量是否存在
- getattr:如果instance对象中有属性name则打印self.name的值,否则打印‘net find‘
- callable:判断对象是否可以被调用,可以返回True,不可以返回False
封装
广义上的封装
- 把属性和方法装起来,在外部不能直接调用,需要通过类名的方式调用
狭义上的封装
- 把属性和方法藏起类,在外部不能调用,只能在内部偷偷调用
封装的语法
- 私有的静态变量
- 私有的实例变量
- 私有的绑定方法
私有的特点
- 私有的可以在内部使用
- 私有的不能在外部使用
- 私有的也不可以在子类中使用
原理
class User: __Country = 'china' __Role = '法师' def func(self): print(self.__Country)#在内部调用的时候会自动帮你加上类名 print(User.__Country)#早类的外部调用不到是因为python没有自动为你加_User
类中变量的级别
- 公有的 public 类内类外都能用,父类子类都能用 python支持
- 保护的 protect 保护的 类内能用,父类子内都能用,类外不能用 python不支持
- 私有的 private 私有的 本类的类内部能用,其他地方都不能用 python支持
以上是关于面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章