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

目录

一、基类 与 派生类

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、创建派生类的格式
class Paishenclassname(Jileiclassname):

#class  派生类名(基类名):
….
#即:表示Paishenclass  类   继承了  Jileiclass的所有属性、方法
【知识点】

issubclass(A,B):判断A类是否是B类的子类;
isinstance(a,A):判断a是否是A类的对象;
A.__bases__:返回A类的基类,如果没有基类,返回<class’object’>
3、举例:圆是点的子类
import math
class Point:
”’Class that represents geometric point”’
def __init__(self,xValue=0,yValue=0):
”’Point constructor take x and y coordinates”’
self.x=xValue
self.y=yValue
class Circle(Point):
”’Class that represents a circle”’
def __init__(self,x=0,y=0,radiusValue=0.0):
”’Circle corstructor takes x and y coordinates of center
point and radius”’
Point.__init__(self,x,y)#class base-class constructor
self.radius=float(radiusValue)
def area(self):
”’Computes area of a Circle”’
return math.pi * self.radius ** 2
#main program
#examine classes Point and Circle
print(“Point bases:”,Point.__bases__)
print(“Circle bases:”,Circle.__bases__)

print(“Point is a subclass of Circle:”,issubclass(Point,Circle))
print(“Circle is a subclass of Point:”,issubclass(Circle,Point))

point =Point(30,50)#create Point object
circle=Circle(120,89,2.7)#create Circle object
print(“\ncircle is a Circle object:”,isinstance(circle,Point))
print(“point is a Circle object:”,isinstance(point,Circle))
print(“Circle is a point object:”,isinstance(circle,Point))

#print Point and Circle objects
print (“\npoint members:\n\t”,point.__dict__)
print(“circle menbers:\n\t”,circle.__dict__)

print(“\nArea of circle:”,circle.area())
运行结果:

Point bases: (<class ‘object’>,)
Circle bases: (<class ‘__main__.Point’>,)
Point is a subclass of Circle: False
Circle is a subclass of Point: True

circle is a Circle object: True
point is a Circle object: False
Circle is a point object: True

point members:
{‘x’: 30, ‘y’: 50}
circle menbers:
{‘x’: 120, ‘y’: 89, ‘radius’: 2.7}

Area of circle: 22.902210444669596
二、异常基类
下列异常主要被用作其他异常的基类。

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

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

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

try:

except SomeException:
tb = sys.exc_info()[2]
raise OtherException(…).with_traceback(tb)
4、exception Exception
所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。

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

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

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