python的类和模块

python的类和模块

内置电池(batteries included) :基础代码库,覆盖了网络通信、文件处理、数据库接口、图形系统、XML处理

第三方工具包

• Pandas:数据处理与分析

• Numpy:科学计算

• Scikit-learn:基于SciPy和Numpy的开源机器学习模块

• Tensorflow:深度学习框架

1、Python程序的架构

Python程序的构架指:将一个程序分割为 源代码文件的集合以及将这些部分连接在一起的方法 

Python源代码文件:*.py 
一个py文件是一个模块(module)
多个模块可以组成一个包(package) 

image

image

2、导入内置的模块

模块是Python中的最高级别组织单元,它 将程序代码和数据封装起来以便重用

模块的三个角色:

1、代码重用

2、系统命名空间的划分(模块可理解为变量名 的封装,即模块就是命名空间)

3、实现共享服务和数据

image

在项目下新建一个包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中的类和对象

image

创建类和类的对象
# 定义类
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异常类层级区别

image

image

错误类型
# 如果代码出现了语法错误,程序不会执行
# 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("异常")
posted @ 2022-03-30 22:07  阿伟宝座  阅读(353)  评论(0)    收藏  举报