python中类和对象的属性信息、常见类函数和异常处理

1.类的信息

在python中比较常用的类的信息有以下几种,
在这里插入图片描述
下面我们来使用一下,

class Animal:
    def __init__(self, age):
        self.age = age


class Cat(Animal):
    pass


print(Cat.__name__, type(Cat.__name__))  # 注意此处返回的是字符串类型
print(Cat.__dict__)  # 返回类的信息
print(Cat.__bases__)  # 返回该类的父类
print(Cat.__module__)  # 返回类所在的模块
print(Cat.__mro__)  # 返回类的继承顺序

执行结果如下,

Cat <class 'str'>
{'__module__': '__main__', '__doc__': None}
(<class '__main__.Animal'>,)
__main__
(<class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)

2.对象的信息

下面我们以举例的方式来讲解一下对象的常见信息,

class Animal:
    def __init__(self, age):
        self.age = age


class Cat(Animal):
    pass


c1 = Cat(5)
print(dir(c1))  # 返回对象的信息
print(c1.__dict__)  # 返回对象属性字典
print(c1.__module__)  # 返回对象的模块名
print(c1.__class__)  # 返回对象所属类的类名的类名,注意返回的不是类名字符串

执行结果如下,

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age']
{'age': 5}
__main__
<class '__main__.Cat'>

3.常见类函数

在python中比较常用的类函数有以下几种,
在这里插入图片描述
下面我们来使用一些,

class Animal:
    def __init__(self, age):
        self.age = age


class Cat(Animal):
    pass


c1 = Cat(5)
print(issubclass(Cat, Animal))  # 判断第一个参数是不是第二个参数的子类,是返回True,不是返回False
print(isinstance(c1, Cat))  # 判断类型,可以判断对象是否属于类
print(hasattr(c1, "age"))  # 判断对象(第一个参数)是否有该属性(第二个参数),注意属性需要是字符串类型
print(getattr(c1, "age"))  # 输出对象的属性值
print(callable(c1))  # 判断一个对象是否可以被调用

执行结果如下,

True
True
True
5
False

我们可以给类添加__call__魔术方法,使对象可以被调用,

class Animal:
    def __init__(self, age):
        self.age = age


class Cat(Animal):
    def __call__(self, *args, **kwargs):
        pass


print(callable(c1))

执行结果如下,

True

4.异常处理

4.1.try-except语句

错误指的是代码有语法问题,⽆法解释运⾏,必须改正后才能运⾏。

如果代码没有语法问题,可以运⾏,但会出运⾏时的错误,例如除零错误,下标越界等问题,这种在运⾏期间检测到的错误被称为异常,出现了异常必须处理否则程序会终⽌执⾏,⽤户体验会很差。python⽀持程序员自己处理检测到的异常。我们可以使用try-except语句进行异常的检测和处理。

例如,

try:
    print(1 / 0)  # 被检测的代码块
except ZeroDivisionError as e:  # 指定可能出现的错误,我们这里指定ZeroDivisionError
    print(e)  # 如果出现上面提到的错误会执行该块代码

执行结果如下,

division by zero

注意,我们可以对于出现的不同类错误可以有不同的解决代码,例如,

try:
    print(1 / 0)
except ZeroDivisionError as e:  # 可能出现的第二种错误
    print(e)
except StopIteration as e:  # 可能出现的第二种错误
    print(e)

注意,如果检测代码块出现异常,则不会继续向下执行,而是直接跳转到except语句。

例如,

try:
    print(1 / 0)
    print("*" * 100)
except ZeroDivisionError as e:
    print(e)

执行结果如下,

division by zero

我们可以看到print("*" * 100)该句并未被执行。

我们还可以在try-except语句后加入else语句和finally语句。else语句是如果没有检测到异常则会执行else语句。finally语句是一定会被执行的语句,不管有没有异常。例如,

try:
    print(1 / 1)
except ZeroDivisionError as e:
    print(e)
else:
    print("没有异常")
finally:
    print("结束")

执行结果如下,

1.0
没有异常
结束

4.2.抛出异常

⼿动抛出⼀个指定类型的异常,⽆论是哪种异常类都可以带⼀个字符串参数,对异常进⾏描述。

raise不带参数会把错误原样抛出。

try:
    raise ZeroDivisionError('除0错误')
    # raise ZeroDivisionError  #如果不想获取错误信息,可以不带参数
except ZeroDivisionError as e:
    print(e)  #除0错误

执行结果如下,

0错误

4.3.自定义异常类

如果系统异常类型满⾜不了业务需求,那么可以⾃⼰定义异常类来处理。

注意,⾃⼰定义的异常类必须继承BaseException或Exception。

下面我们来定义一个异常类,

class CustomException(Exception):  # 继承系统的异常处理类
    def __init__(self, msg):
        super().__init__()  # 调用父类的构造方法
        self.msg = msg
    
    def __str__(self):  # 重做__str__魔术方法
        return self.msg
    
    def handle(self):
        print("异常处理方法")  # 自定义异常的处理方法

4.4.异常嵌套

与循环、判断等语句一样,异常可以进行嵌套。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值