python的类和模块
python的类和模块
目录
内置电池(batteries included) :基础代码库,覆盖了网络通信、文件处理、数据库接口、图形系统、XML处理
第三方工具包
• Pandas:数据处理与分析
• Numpy:科学计算
• Scikit-learn:基于SciPy和Numpy的开源机器学习模块
• Tensorflow:深度学习框架
1、Python程序的架构
Python程序的构架指:将一个程序分割为 源代码文件的集合以及将这些部分连接在一起的方法
Python源代码文件:*.py
一个py文件是一个模块(module)
多个模块可以组成一个包(package)


2、导入内置的模块
模块是Python中的最高级别组织单元,它 将程序代码和数据封装起来以便重用
模块的三个角色:
1、代码重用
2、系统命名空间的划分(模块可理解为变量名 的封装,即模块就是命名空间)
3、实现共享服务和数据

在项目下新建一个包test,包内会自动生成一个初始化模块__init__.py
在test包内新建两个模块module1.py module2.py
在module1.py内新建一个函数
def fun1(x, y):
return x * y
在module2.py模块内新建一个函数
def fun2(x, y):
return x ** y
在包test外部新建一个模块,例如demo.py
想要包外的模块使用包内模块的函数,就需要引入包或模块
# 导入模块,取别名,导入包下面的单个模块
import test.module1 as m1
# 通过别名可以调取引入模块中的函数
print(m1.fun1(10, 20)) # 200
# 导入模块下所有的东西
# python中导入模块实际上就是将模块的代码全部执行一遍
from test.module1 import *
print(fun1(10, 20)) # 200
# from test.module1 import fun1 -- 这样相当于只引入了fun1
# 导入包下面所有的模块
# 需要在 __init__.py 中增加 __all__ = ["module1", "module2"]
from test import *
print(module1.fun1(10, 2)) # 20
print(module2.fun2(10, 2)) # 100
3、导入第三方工具包----numpy
在Java中是通过maven来管理第三方工具包;
在python中是通过pip命令来管理第三方工具包
下载第三方工具包
修改 pip 源 找到系统盘下C:\Users\用户名\AppData\Roaming,APPData可能是隐藏文件,需要将隐藏关闭; 查看在Roaming文件夹下有没有一个pip文件夹,如果没有创建一个; 进入pip文件夹,创建一个pip.ini文件; 使用记事本的方式打开pip.ini文件,写入: [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple 打开命令栏输入 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy 在命令栏中再次输入 pip install numpy pip install pandas
import sys
# python 搜索包的位置
for p in sys.path:
print(p)
4、python中的类和对象

创建类和类的对象
# 定义类
class Student():
# 初始化函数,相当于构造函数
# self 相当于java中的this
def __init__(self, id: str, name: str, age: int, gender: str, clazz: str = "一班"):
# 给成员变量赋值, 赋值及定义
# 成员变量的私有化,不能在外面访问
self.id = id
self.name = name
self.age = age
self.gender = gender
self.clazz = clazz
# 普通方法
def print(self):
print(self.id,self.name,self.age,self.gender,self.clazz)
# 创建类的对象
student1 = Student("001", "张三", 23, "男", "一班")
# 调用对象的方法
student1.print() # 001 张三 23 男 一班
# 修改属性的值
student1.age = 24
student1.print() # 001 张三 24 男 一班
# 获取属性的值
print(student1.age) # 24
私有化
# 定义类
class Student():
# 初始化函数,相当于构造函数
# self 相当于java中的this
# 给初始化函数添加一个默认值,在创建对象的时候就不用给该参数赋值了
def __init__(self, id: str, name: str, age: int, gender: str, clazz: str = "一班"):
print("初始化")
# 给成员变量赋值, 赋值及定义
self.id = id
self.__name = name # 成员变量的私有化,在类的内部可以用,不能在类外面访问
self.age = age
self.gender = gender
self.clazz = clazz
# 普通方法
def print(self):
# 在类的内部调用私有化方法
str = self.__mk_str()
print(str)
# 定义一个私有的方法
def __mk_str(self):
# python中字符串拼接
# %s表示字符串、%d表示数字
str = "%s\t%s\t%d\t%s\t%s" % (self.id, self.__name, self.age, self.gender, self.clazz)
return str
# 创建类的对象,班级在初始化函数给了默认值,在创建对象的时候就不用赋值了
student2 = Student("002", "李四", 22, "男")
student2.print()
继承
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def print(self):
print("Person", self.name, self.age)
# 继承父类,会将父类所有的东西都继承过来
class Student(Person):
# 重写父类的方法
def print(self):
print("Student", self.name, self.age)
# 父类的引用指向子类的对象(多态)
student: Person = Student("张三", 23)
student.print() # Student 张三 23
5、python异常
语法错误(Syntax errors) :
代码编译时的错误,不符合Python语言规则的代码会停止编译并返回 错误信息
异常(Exceptions) :
相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生, 如类型错 误、数值 错误、索引错误和属性错误等。
语法错误包含在异常基类中
python与Java异常类层级区别


错误类型
# 如果代码出现了语法错误,程序不会执行
# SyntaxError : 语法错误, idea可以检测出来
'''
str = "aaa
print(str)
'''
# IndentationError: 代码结构错误
'''
if True:
print("asda")
'''
异常产生
print("666") # 666
# 如果出现了异常,前面的代码可以正常运行
# 除0异常
'''
i = 100 / 0
print(i)
'''
# NameError: 变量不存在异常
'''
print(name)
'''
# ValueError: 类型转换成异常
'''
print(int("java"))
'''
# TypeError:类型异常
'''
print("1" + 1)
'''
# IndexError: 下标越界(索引异常)
'''
li = [1, 2, 3]
print(li[10])
'''
# AttributeError : 属性异常
'''
s = "java"
s.append("asd")
'''
#
异常处理(捕获异常)
try:
# 捕获异常
i = 100 / 0
except(AttributeError) as a:
# 处理异常
print(a)
except(ZeroDivisionError) as a:
print(a)
else:
print("其它异常")
finally:
print("都会执行")
print("代码执行完成")
# 如果条件为true ,正常运行;如果为false抛出后面的异常
assert 10 > 5, RuntimeError("运行异常")
# 直接抛出异常
raise RuntimeError("异常")

浙公网安备 33010602011771号