Python面向对象编程 —— 类和异常处理

简介: Python面向对象编程 —— 类和异常处理



1. 类

类可以将变量、函数打包在一起,让代码在逻辑上更加清晰。

名称一般采用驼峰命名法,函数一般采用下划线命名法。

类中函数的第一个参数都是self调用类本身的变量和函数。

当调用类中函数的时候,第一个参数self不需要自己传递,Python会自动传递这个参数。

1.1 类的定义

class Hero:
    hero_count = 0  # 类变量
    def __init__(self, name, level=10):  # 构造函数
        self.name = name
        self.level = level
        print("Hero %s has been created." % name)
        Hero.hero_count += 1
    def __str__(self):  # 定义str()函数的效果
        return "Hero: %s" % self.name
    def greet(self):  # 问候
        print("%s: Hi!" % self.name)
    def move(self):  # 移动
        print("%s: Move!" % self.name)
    def get_level(self):  # 获取这个英雄的等级
        return self.level
    def next_level(self):
        return self.get_level() + 1  # 调用类中的其他函数
zeus = Hero("Zeus")
athena = Hero("Athena", 6)
zeus.greet()
athena.move()
print(zeus.name, athena.get_level(), athena.next_level())
print(str(zeus), athena)
print(Hero.hero_count)

1.2 类变量和实例变量

每个类可以创建任意多实例。

例如上面的Hero类,可以创建zeus和athena等实例。

类变量由所有实例共享,一般通过类名访问。

例如Hero.hero_count。

实例变量与每个具体的实例绑定,一般通过具体实例来访问。

例如zeus.name。

1.3 类的继承

子类可以继承父类的变量和函数。

self可以调用自身和父类中的变量和函数super()可以调用父类中的函数。

如果子类和父类的变量或函数重名优先使用子类的变量和函数。

class Hero:
    hero_count = 0  # 类变量
    def __init__(self, name, level=10):  # 构造函数
        self.name = name
        self.level = level
        print("Hero %s has been created." % name)
        Hero.hero_count += 1
    def __str__(self):  # 定义str()函数的效果
        return "Hero: %s" % self.name
    def greet(self):  # 问候
        print("%s: Hi!" % self.name)
    def move(self):  # 移动
        print("%s: Move!" % self.name)
    def get_level(self):  # 获取这个英雄的等级
        return self.level
    def next_level(self):
        return self.get_level() + 1  # 调用类中的其他函数
class Zeus(Hero):
    hero_name = "Zeus"
    def __init__(self, level):
        super().__init__(Zeus.hero_name, level)  # 通过super()调用父类的构造函数
    def greet(self):
        print("%s: Hi!(from child class)" % self.name)  # 使用的是父类的`name`
class Athena(Hero):
    hero_name = "Athena"
    def __init__(self, level):
        super().__init__(Athena.hero_name, level)  # 通过super()调用父类的构造函数
    def greet(self):
        print("%s: Hi!(from child class)" % self.name)  # 使用的是父类的`name`
zeus = Zeus(6)
athena = Athena(8)
print(zeus.name, athena.level, Hero.hero_count)
print(str(zeus), str(athena))
zeus.greet()
athena.greet()
print(zeus.get_level())

运行结果:

2. 异常处理

当某段代码出现异常时,代码会被终止。

此时如果不想让代码终止,可以用try ... except ... 语句来处理异常。

2.1类型异常

例如,将字符串转化成整数时,可能会出现异常:

s = input()
try:
    x = int(s)
    print(x)
except Exception as e:
    print(e)
print("Finished!")

2.2除零异常

当除以0时,也会出现异常:

x, y = map(int, input().split())
try:
    z = x / y
    print(z)
except Exception as e:
    print(e)
print("Finished!")

 

目录
相关文章
|
2月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
8月前
|
数据采集 监控 Python
Python爬虫异常处理:自动跳过无效URL
Python爬虫异常处理:自动跳过无效URL
Python爬虫异常处理:自动跳过无效URL
|
7月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
199 11
|
10月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
497 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
8月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
183 1
|
9月前
|
数据库连接 开发者 Python
Python中的异常处理
本文深入探讨了Python中的异常处理机制,包括异常的捕获、处理、抛出及最佳实践。通过try-except语句块,程序可以在运行时处理错误,增强健壮性和可维护性。文章还介绍了自定义异常类的创建与使用,并提供了代码示例和详细的语法说明。最后,总结了异常处理的最佳实践,如精确捕获异常、提供有用错误信息等,帮助开发者编写更可靠的代码。
343 14
|
9月前
|
人工智能 数据库 开发者
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
介绍了 Python 中 `try` 语句的完全体,包括 `try`、`except`、`else` 和 `finally` 子句的使用。通过实例展示了如何捕获异常并输出详细的错误信息,如文件名和行号。特别强调了 `finally` 子句的作用,无论是否发生异常,`finally` 都会执行,常用于清理操作。最后总结了 `try` 语句的四个部分及其应用场景,并简要提及了 Python 社区的决策机制。 #try #except #else #finally
174 1
|
UED 开发者 Python
Python中的异常处理机制
Python中的异常处理机制
176 2
|
11月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
197 2