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

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

6、exception BufferError

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

7、exception LookupError

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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

濯一一

你的鼓励:我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值