Python:类、基类、超类、派生类、异常基类

ゝ一纸荒年。 2022-11-19 04:17 607阅读 0赞

目录

一、基类 与 派生类

1、“属于”(is-a)和 “具有”(has-a)的区别

2、创建派生类的格式

3、举例:圆是点的子类

二、异常基类

1、exception BaseException

2、args

3、with_traceback(tb)

4、exception Exception

5、exception ArithmeticError

6、exception BufferError

7、exception LookupError


一、基类 与 派生类

1、“属于”(is-a)和 “具有”(has-a)的区别

“属于”即为继承:在这种关系中,派生类的一个对象也属于“基类”的一个对象。

“具有”即为“合成”:这种关系中,一个对象“具有”对其他类的一个或多个对象的引用,后者是前者的成员。

基类即超类,派生类即子类。

2、创建派生类的格式

  1. class Paishenclassname(Jileiclassname):
  2. ...
  3. #class 派生类名(基类名):
  4. ....
  5. #即:表示Paishenclass 类 继承了 Jileiclass的所有属性、方法

【知识点】

  • issubclass(A,B):判断A类是否是B类的子类;
  • isinstance(a,A):判断a是否是A类的对象;
  • A.__bases__:返回A类的基类,如果没有基类,返回

3、举例:圆是点的子类

  1. import math
  2. class Point:
  3. '''Class that represents geometric point'''
  4. def __init__(self,xValue=0,yValue=0):
  5. '''Point constructor take x and y coordinates'''
  6. self.x=xValue
  7. self.y=yValue
  8. class Circle(Point):
  9. '''Class that represents a circle'''
  10. def __init__(self,x=0,y=0,radiusValue=0.0):
  11. '''Circle corstructor takes x and y coordinates of center
  12. point and radius'''
  13. Point.__init__(self,x,y)#class base-class constructor
  14. self.radius=float(radiusValue)
  15. def area(self):
  16. '''Computes area of a Circle'''
  17. return math.pi * self.radius ** 2
  18. #main program
  19. #examine classes Point and Circle
  20. print("Point bases:",Point.__bases__)
  21. print("Circle bases:",Circle.__bases__)
  22. print("Point is a subclass of Circle:",issubclass(Point,Circle))
  23. print("Circle is a subclass of Point:",issubclass(Circle,Point))
  24. point =Point(30,50)#create Point object
  25. circle=Circle(120,89,2.7)#create Circle object
  26. print("\ncircle is a Circle object:",isinstance(circle,Point))
  27. print("point is a Circle object:",isinstance(point,Circle))
  28. print("Circle is a point object:",isinstance(circle,Point))
  29. #print Point and Circle objects
  30. print ("\npoint members:\n\t",point.__dict__)
  31. print("circle menbers:\n\t",circle.__dict__)
  32. print("\nArea of circle:",circle.area())

运行结果:

  1. Point bases: (<class 'object'>,)
  2. Circle bases: (<class '__main__.Point'>,)
  3. Point is a subclass of Circle: False
  4. Circle is a subclass of Point: True
  5. circle is a Circle object: True
  6. point is a Circle object: False
  7. Circle is a point object: True
  8. point members:
  9. {'x': 30, 'y': 50}
  10. circle menbers:
  11. {'x': 120, 'y': 89, 'radius': 2.7}
  12. Area of circle: 22.902210444669596

二、异常基类

下列异常主要被用作其他异常的基类。

1、exception BaseException

所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 Exception)。 如果在此类的实例上调用 str(),则会返回实例的参数表示,或者当没有参数时返回空字符串。

2、args

传给异常构造器的参数元组。 某些内置异常接受特定数量的参数并赋予此元组中的元素特殊的含义,而其他异常通常只接受一个给出错误信息的单独字符串。

3、with_traceback(tb)

此方法将 tb 设为异常的新回溯信息并返回该异常对象。 它通常以如下的形式在异常处理程序中使用:

  1. try:
  2. ...
  3. except SomeException:
  4. tb = sys.exc_info()[2]
  5. raise OtherException(...).with_traceback(tb)

4、**exception Exception**

所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。

5、exception ArithmeticError

此基类用于派生针对各种算术类错误而引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError

6、exception BufferError

当与 缓冲区 相关的操作无法执行时将被引发。

7、exception LookupError

此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: IndexError, KeyError。 这可以通过 codecs.lookup() 来直接引发。

发表评论

表情:
评论列表 (有 0 条评论,607人围观)

还没有评论,来说两句吧...

相关阅读

    相关 定义派生

    数据抽象是一种依赖于接口和实现分离的编程技术。继承和动态绑定对程序的编号有两方面的影响:一是我们可以更容易地定义与其它类相似但不完全相同的类;二是在使用这些彼此相似的类编写程序

    相关 C++派生的转换

    只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能。基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类

    相关 派生的转换(2)

    一、 基类与派生类的转换     3种继承方式(公用、保护、私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能。     不同类型数据之间在一定条件下可