12.2.2 继承
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程。
继承概念的实现方式主要有2类:实现继承、接口继承。
实现继承是指使用基类的属性和方法而无需额外编码的能力。
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)。
class RichMan(object):
def __init__(self):
self.money = 100000000
self.company = "阿里巴巴"
def tell_moto(self):
print("我没有钱")
class Son(RichMan):
pass
if __name__ == '__main__':
s = Son()
print(s.money)
print(s.company)
print(s.tell_moto())
子类继承父类的时候并不能继承所有的属性和方法(私有)
重写(覆盖):子类继承父类的时候,可以重写方法
注意:重写的时候方法名、参数以及参数的个数必须保持一致
class RichMan(object):
def __init__(self):
self.money = 100000000
self.company = "阿里巴巴"
self.__house = "北京"
def tell_moto(self):
print("我没有钱")
def __speak(self):
print("讲英文贼溜")
def working(self):
print("A员工工作的认真")
class Son(RichMan):
def working(self):
print("B员工工作认真")
if __name__ == '__main__':
s = Son()
print(s.money)
print(s.company)
print(s.tell_moto())
print(s.working())
面试题:python里有没有重载,有没有重写
重载:方法名相同,参数以及参数的个数不同
python里面是没有重载,但是可以实现重载-----通过装饰器
python里面可以多继承
思考问题:A继承B和C,B和C里面都有H(),那么A继承是哪个H()?
广度优先
super关键字 :指针,默认指向的父类
class RichMan(object):
def __init__(self):
self.money = 100000000
self.company = "阿里巴巴"
self.__house = "北京"
def tell_moto(self):
print("我没有钱")
def __speak(self):
print("讲英文贼溜")
def working(self):
print("A员工工作的认真")
class Son(RichMan,object):
def working(self):
print("B员工工作认真")
def test(self):
self.working()
super().working()
if __name__ == '__main__':
s = Son()
# print(s.money)
# print(s.company)
# print(s.tell_moto())
# print(s.working()) s.test()
12.2.3 多态
python不重要
一、多态
1、定义
一个类的多种形态,如一个文件的格式可以是txt、word、excel等
2、python天生多态
python是动态的强制类型语言,数据类型不需要定义,在归一化的过程中不需要定义一个类,让其它类继承,来解决数据类型的不同
ArrayList a1 = new ArrayList();
List l1 = new ArrayList();
13.异常
13.1 了解什么是异常
异常:正常的情况,运行程序的过程中出现问题,BUG(错误不一定是异常)
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
13.2 处理异常
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
try代码块
try:
#放的是有可能造成异常的代码
except:
#处理异常
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
try:num = int(input("请你输入一个数:"))
result = num + 10
#except Exception as e:
except ValueError as e:
print("出异常")
print("在这里处理异常,出现的异常是",e)
num = int(input("输入的格式是数字:"))
result = num + 10
print("结束了")
常见的异常:
import builtins
dir(builtins)
[‘ArithmeticError’, ‘AssertionError’, ‘AttributeError’, ‘BaseException’, ‘BlockingIOError’,
‘BrokenPipeError’, ‘BufferError’, ‘BytesWarning’, ‘ChildProcessError’, ‘ConnectionAbortedError’,
‘ConnectionError’, ‘ConnectionRefusedError’, ‘ConnectionResetError’, ‘DeprecationWarning’,
‘EOFError’, ‘Ellipsis’, ‘EnvironmentError’, ‘Exception’, ‘False’, ‘FileExistsError’, ‘FileNotFoundError’,
‘FloatingPointError’, ‘FutureWarning’, ‘GeneratorExit’, ‘IOError’, ‘ImportError’, ‘ImportWarning’,
‘IndentationError’, ‘IndexError’, ‘InterruptedError’, ‘IsADirectoryError’, ‘KeyError’,
‘KeyboardInterrupt’, ‘LookupError’, ‘MemoryError’, ‘ModuleNotFoundError’, ‘NameError’, ‘None’,
‘NotADirectoryError’, ‘NotImplemented’, ‘NotImplementedError’, ‘OSError’, ‘OverflowError’,
‘PendingDeprecationWarning’, ‘PermissionError’, ‘ProcessLookupError’, ‘RecursionError’,
‘ReferenceError’, ‘ResourceWarning’, ‘RuntimeError’, ‘RuntimeWarning’, ‘StopAsyncIteration’,
‘StopIteration’, ‘SyntaxError’, ‘SyntaxWarning’, ‘SystemError’, ‘SystemExit’, ‘TabError’,
‘TimeoutError’, ‘True’, ‘TypeError’, ‘UnboundLocalError’, ‘UnicodeDecodeError’,
‘UnicodeEncodeError’, ‘UnicodeError’, ‘UnicodeTranslateError’, ‘UnicodeWarning’, ‘UserWarning’,
‘ValueError’, ‘Warning’, ‘WindowsError’, ‘ZeroDivisionError’, ‘build_class’, ‘debug’, ‘doc’, ‘import’,
‘loader’, ‘name’, ‘package’, ‘spec’, ‘abs’, ‘all’, ‘any’, ‘ascii’, ‘bin’, ‘bool’, ‘breakpoint’, ‘bytearray’,
‘bytes’, ‘callable’, ‘chr’, ‘classmethod’, ‘compile’, ‘complex’, ‘copyright’, ‘credits’, ‘delattr’, ‘dict’, ‘dir’,
‘divmod’, ‘enumerate’, ‘eval’, ‘exec’, ‘exit’, ‘filter’, ‘float’, ‘format’, ‘frozenset’, ‘getattr’, ‘globals’,
‘hasattr’, ‘hash’, ‘help’, ‘hex’, ‘id’, ‘input’, ‘int’, ‘isinstance’, ‘issubclass’, ‘iter’, ‘len’, ‘license’, ‘list’,
‘locals’, ‘map’, ‘max’, ‘memoryview’, ‘min’, ‘next’, ‘object’, ‘oct’, ‘open’, ‘ord’, ‘pow’, ‘print’, ‘property’,
‘quit’, ‘range’, ‘repr’, ‘reversed’, ‘round’, ‘set’, ‘setattr’, ‘slice’, ‘sorted’, ‘staticmethod’, ‘str’, ‘sum’,
‘super’, ‘tuple’, ‘type’, ‘vars’, ‘zip’]
异常的继承关系
BaseException 是所有异常的父类
断言测试