Python 函数相关(二)
1. 多态
同一个方法在不同的类中最终呈现出不同的效果,即为多态。
|
|
2. 继承 重构 重写 重载
Python
的继承没有类似java
中的extends
关键字,当Python
中一个类需要继承另一个类的时候,只需要将被继承的类通过变量形式传递给新类,即可完成继承
Python
还可以实现多继承,将多个被继承类通过变量形式传递给新类,即可完成多继承
2.1. 重写
方法名相同,参数相同,内容不同
2.2. 重载
方法名字相同,参数不同
3. 继承查询
Python2
经典类都是按照深度类查询(及深度优先搜索算法)
Python2
新式类都是按照广度类查询(及广度优先搜索算法)
Python3
新式类和经典类都是按照广度类查询
4. 示例:
只能说是可以用,但还是有很大部分的疑问,只能用仅剩的一点java
记忆强行解释了
|
|
5. 类方法、静态方法、属性方法、property
-
静态方法: 通过修饰器
@staticmethod
来进行修饰的方法,静态方法不需要定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用(实际上不可直接访问类和实例中的任何属性和方法)。可通过实例对象或类对象进行访问。 -
类方法: 是类对象所拥有的方法,需要用修饰器
@classmethod
来标识其为类方法,第一个参数必须是类对象,一般以cls
作为第一个参数。可通过实例对象或类对象进行访问。类方法只能访问类变量,不可访问实例(self
)变量。 -
属性方法: 通过
@property
来进行修饰,可以将类方法转换为属性对象,使其调用时候可以直接通过实例对象像调用类属性一样进行调用,其总共包含三种访问形式@property
,@方法名.setter
,@方法名.deleter
。一般用来处理私有变量。和java
的getter、setter
方法有点类似(吧?个人感觉没什么卵用的样子,可能是没有用到) -
property
: 大部分的解释是函数的作用是在新式类中返回属性值,个人还并不是特别理解这个的意思,不过用java
来对比的话,就是getter
、setter
的升级版。property
总共包含4个参数:- 第一个参数是方法名,在调用
(类/实例)对象.属性
自动触发执行方法; - 第二个参数是方法名,在调用
(类/实例)对象.属性=xx
时自动触发执行方法; - 第三个参数是方法名,在调用
del (类/实例)对象.属性
时自动触发执行方法; - 第四个参数是字符串,在调用
实例对象.属性.__doc__
,此参数是该属性的描述信息;
- 第一个参数是方法名,在调用
示例:
|
|
6. metaclass
这个东西个人感觉又有点像注入的感觉吧,他的作用是在某个类中定义当前类按照什么方式来被初始化(或者创建),大概就是这个意思吧
7. 反射
通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法
getattr(object, str, default=None)
得到对象中字符串表示的方法的内存地址hasattr(object, str):
判断一个对象中是否包含字符串表示的方法setattr(object, str, func):
为类添加一个新的函数(或变量)object.str = func
delattr(class_object,str):
删除类中表示字符串的变量(或函数),等价于del class_object.str
示例代码:
|
|
8. 异常处理
常见异常
异常名称 | 描述 |
---|---|
BaseException |
所有异常的基类 |
SystemExit |
解释器请求退出 |
KeyboardInterrupt |
用户中断执行(通常是输入^C) |
Exception |
常规错误的基类 |
StopIteration |
迭代器没有更多的值 |
GeneratorExit |
生成器(generator)发生异常来通知退出 |
StandardError |
所有的内建标准异常的基类 |
ArithmeticError |
所有数值计算错误的基类 |
FloatingPointError |
浮点计算错误 |
OverflowError |
数值运算超出最大限制 |
ZeroDivisionError |
除(或取模)零 (所有数据类型) |
AssertionError |
断言语句失败 |
AttributeError |
对象没有这个属性 |
EOFError |
没有内建输入,到达EOF 标记 |
EnvironmentError |
操作系统错误的基类 |
IOError |
输入/输出操作失败 |
OSError |
操作系统错误 |
WindowsError |
系统调用失败 |
ImportError |
导入模块/对象失败 |
LookupError |
无效数据查询的基类 |
IndexError |
序列中没有此索引(index) |
KeyError |
映射中没有这个键 |
MemoryError |
内存溢出错误(对于Python 解释器不是致命的) |
NameError |
未声明/初始化对象 (没有属性) |
UnboundLocalError |
访问未初始化的本地变量 |
ReferenceError |
弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError |
一般的运行时错误 |
NotImplementedError |
尚未实现的方法 |
SyntaxError |
Python 语法错误 |
IndentationError |
缩进错误 |
TabError |
Tab 和空格混用 |
SystemError |
一般的解释器系统错误 |
TypeError |
对类型无效的操作 |
ValueError |
传入无效的参数 |
UnicodeError |
Unicode 相关的错误 |
UnicodeDecodeError |
Unicode 解码时的错误 |
UnicodeEncodeError |
Unicode 编码时错误 |
UnicodeTranslateError |
Unicode 转换时错误 |
Warning |
警告的基类 |
DeprecationWarning |
关于被弃用的特征的警告 |
FutureWarning |
关于构造将来语义会有改变的警告 |
OverflowWarning |
旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning |
关于特性将会被废弃的警告 |
RuntimeWarning |
可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning |
可疑的语法的警告 |
UserWarning |
用户代码生成的警告 |
示例 1 :
|
|
示例 2 :
|
|
9. 断言 assert
语法格式:
assert condition,str
用来判断条件真假,为真执行下一步,为假抛出AssertionError
异常
其功能大致相当于 :
|
|
示例 :
|
|