Python学习笔记4

类和对象

Python 是一门面向对象的语言,所以他和Java一样都具备类、继承等概念。

类定义仍然使用 class 关键字。

py 复制代码
class MyClass: 
    i = 12345 
    def f(self): 
        return 'hello world' 
        
# 实例化类 
x = MyClass() 
# 访问类的属性和方法 
print("MyClass 类的属性 i 为:", x.i) 
print("MyClass 类的方法 f 输出为:", x.f())

注意 :这里实例化类的时候不像其他语言一样使用new关键字,而是直接使用=

类默认具备一个 __init__() 的构造方法,在类实例化的时候会自动调用。同时 __init__() 作为一个方法,也可以存在参数。

py 复制代码
class Complex: 
    def __init__(self, realpart, imagpart): 
        self.r = realpart 
        self.i = imagpart
        
x = Complex(3.0, -4.5) 
print(x.r, x.i) # 输出结果:3.0 -4.5

类方法

类中的方法存在一个与外部方法不同的点,类方法第一个参数是 self ,他指向的是 类实例。

注意 :这里的 self 只是一个约定俗成的叫法,而非关键字。你可以叫他 this ,也可以叫 test 等等。

继承

Python 也支持继承,派生类使用下面的方式。

区别于传统的 extends 派生。

py 复制代码
class NewClass(BaseClass): ...

如果是多继承,则采用 逗号分隔 的方式。

方法重写

在子类中使用与父类相同的方法名实现 方法重写。

在实例化的子类对象中,可以使用 super 方法调用父类的方法。

py 复制代码
class Parent: 
    # 定义父类 
    def myMethod(self): 
        print ('调用父类方法') 
        
class Child(Parent): 
    # 定义子类 
    def myMethod(self): 
        print ('调用子类方法') 
        
c = Child() 
# 子类实例 

c.myMethod() 
# 子类调用重写方法 

super(Child,c).myMethod() 
#用子类对象调用父类已被覆盖的方法

私有属性

类中的私有属性使用开头双下划线定义,私有属性不能被类外部的使用或访问。

同样,私有方法也是使用双下划线定义。

py 复制代码
class MyClass: 
    __private_attrs = 1 
    # 私有属性 
    def __private_getAttrs(self): 
        print('打印', self.__private_attrs)
  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

命令空间和作用域

命名空间

Python中的命名空间遵循 局部 ------ 全局 ------ 内置 的原则。

也就是说代码在运行寻找变量的时候,先在当前命名空间中找,没有的话再去全局找,最后去找内置的。

作用域

Python中的作用域遵循 LEGB 原则。

也就是说先在当前局部作用域中找,然后去外部找,再去全局找,找不到再去内置找。

注意:一般情况下建议当前变量在哪个范围内运行,就在哪里定义。最小作用域原则。

File

Python使用 open 方法打开一个文件。

py 复制代码
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

一般只写前面两个参数。

file 对象比较常用的方法一般有以下几个

  • open 打开文件
  • close 关闭文件
  • write 写入文件
  • tell 获取当前文件位置

OS

os模块主要是用于与操作系统进行交互。

注意:OS模块是跨平台的,在不同的平板一般不需要写兼容性相关的代码。

py 复制代码
import os 
# 获取当前目录 
current_directory = os.getcwd() 
print("当前工作目录:", current_directory) 

# 切换工作目录,参数为目标目录 
os.chdir("/path/to/new/directory") 
print("新的工作目录:", os.getcwd()) 
    
# 获取目录中的内容列表 
files_and_dirs = os.listdir() 
print("目录内容:", files_and_dirs) 
    
# 创建目录,如果当前目录已经存在则报错FileExistsError,而非覆盖。 
os.mkdir("new_directory") 

# 删除空目录,如果当前目录不为空,则报错FileNotFoundError。 
os.remove("file_to_delete.txt") 

# 重命名文件/目录,第一个参数为旧文件名,第二个参数为新文件名 
os.rename("old_name.txt", "new_name.txt") 

# 获取环境变量,如果不存在则返回 None 
home_directory = os.getenv("HOME") 
print("HOME 目录:", home_directory) 
    
# 执行 shell 指令 
os.system("ls -l")

除了上述方法外,OS模块还有非常多的方法,但是需要注意的是部分方法在 Python2 中可能可用,但 Python3 中已经删除。

异常

语法报错

大多数情况下比较常见的就是语法报错:SyntaxError: invalid syntax

运行报错

py 复制代码
10 * (1/0) 
# 0 不能作为除数,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: division by zero

4 + spam*3 
# spam 未定义,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'spam' is not defined 

'2' + 2 
# int 不能与 str 相加,触发异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str

异常捕获

异常捕获使用 try...except 语句。

注意 :这里不是 try...catch

py 复制代码
while True: 
    try: x = int(input("请输入一个数字: ")) 
    break 
except ValueError: 
    print("您输入的不是数字,请再次尝试输入!")

这里 except 在捕获异常的时候可以同时存在多种捕获,用于执行不同的异常操作。

py 复制代码
import sys 

try: 
    f = open('myfile.txt') 
    s = f.readline() 
    i = int(s.strip()) 
except OSError as err: 
    print("OS error: {0}".format(err)) 
except ValueError: 
    print("Could not convert data to an integer.") 
except: 
    print("Unexpected error:", sys.exc_info()[0]) 
    raise

except 还存在一个 else 子句,用于在没有任何异常的时候执行。【使用的并不算多】

py 复制代码
for arg in sys.argv[1:]: 
    try: 
        f = open(arg, 'r') 
    except IOError: 
        print('cannot open', arg) 
    else: 
        print(arg, 'has', len(f.readlines()), 'lines') 
        f.close()

finally 用于执行无论是否发生异常都将执行的语句。

py 复制代码
try: 
    runoob() 
except AssertionError as error: 
    print(error) 
else: 
    try: 
        with open('file.log') as file: 
            read_data = file.read() 
    except FileNotFoundError as fnf_error: 
        print(fnf_error) 
finally: 
    print('这句话,无论异常是否发生都会执行。')

抛出异常

Python 使用 raise 抛出异常,类似于Js中的 throw

语法格式为:raise [Exception [, args [, traceback]]]

py 复制代码
x = 10 
if x > 5: 
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
相关推荐
listhi5202 小时前
MOEAD算法实现详解(基于Python与MATLAB)
python·算法·matlab
byzh_rc2 小时前
[认知计算] 循环神经网络
人工智能·python·rnn·深度学习·神经网络·机器学习
黑客思维者2 小时前
Python 机器学习TensorFlow 2.x 入门实战:CNN/RNN/Transformer
python·机器学习·tensorflow
二川bro2 小时前
类型错误详解:Python TypeError排查手册
android·java·python
计算机学姐3 小时前
基于Python的B站数据分析及可视化系统【2026最新】
开发语言·vue.js·python·信息可视化·数据挖掘·数据分析·推荐算法
haiyu_y3 小时前
Day 33 类的装饰器
python
轻竹办公PPT3 小时前
AI自动写年终总结PPT
人工智能·python·powerpoint
程序员小远3 小时前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例