私有属性和私有方法
python3中有没有私有属性这种说法?如果有的话有是怎么使用的?
”私有“变量、方法
1、封装类的实例上面的“私有”数据,但是Python语言并没有访问控制。
2、Python程序员不去依赖语言特性去封装数据,而是通过遵循一定的属性和方法命名规约来达到这个效果。
单下滑线(_)
第一个约定是任何以单下划线_开头的名字都应该是内部实现。
class A: |
Python并不会真的阻止别人访问内部名称。但是如果你这么做肯定是不好的,可能会导致脆弱的代码。 同时还要注意到,使用下划线开头的约定同样适用于模块名和模块级别函数。
a = A() |
_internal_method |
双下滑线(__)
你还可能会遇到在类定义中使用两个下划线(__)开头的命名。
class B: |
使用双下划线开始会导致访问名称变成其他形式。 比如,在前面的类B中,私有属性会被分别重命名为
_B__private
和_B__private_method
。 这时候你可能会问这样重命名的目的是什么,答案就是继承——这种属性通过继承是无法被覆盖的。
b = B() |
_B__private_method |
私有名称
__private
和__private_method
被重命名为_C__private
和_C__private_method
,这个跟父类B中的名称是完全不同的。
class C(B): |
_B__private_method |
文件基本操作
我们的程序都是运行在内存中的,内存是不可持久化存储的,那怎样才能持久存储呢?
打开文件
path = 'text.txt' # 相对路径 |
以w+模式打开文件,是为写入和读取的模式,没有文件会新建文件,有文件会清空文件。
文件打开模式
不同的文件打开模式,对文件的操作有不同
写入文件
file.write('python') |
写单个字符串
file.writelines(['1', '2', '3']) |
写一行数据
file.flush() |
本来写入的数据是存在内存里的,使用flush方法,把数据保存到硬盘中。
读取与关闭
file.seek(0) # 把光标移到首位 |
读取全部数据
file.readline() |
一行一行的读取数据
file.readlines() |
读取所有行并以列表形式返回
file.flush() # 把内存中的数据保存到硬盘中 |
file.close() |
查看与移动指针
file.tell() |
tell 查看光标位置,seek移动光标的位置。
总结
持久存储:保存内存中数据都是易丢失的,只有保存在硬盘中才能持久的存储,保存在硬盘中的基本方法就是把数据写入文件中。
打开与关闭:在python中文件的打开与关闭变得十分简单快捷,文件在关闭的时候就会自动保存
写入与读取:文件的写入和读取是必须要十分熟练的内容
上下文管理
文件能够自动关闭吗?
with open('test.txt','r') as file: |
c |
with能够自动关闭文件,不需要执行close方法
import time |
Time consuming 0.005983591079711914 |
通过这两个方法可以方便的实现上下文管理
with会把 enter 的返回值赋值给 as 后的变量
总结
with: 使用with打开文件,则文件不需要自己关闭,会自动的关闭
enter: 进入时需要执行的代码,相当于准备工作
exit : 退出时需要执行的代码,相当于收尾工作
IO流
文件可以持久存储,但是现在类似于临时的一些文件,不需要持久存储,如一些临时的二维码等,这个不需要持久存储,但是却需要短时间内大量读取,这是时候还是只能保存在文件里面吗?
StringIO
In [4]: import io |
StringIO在内存中如同打开文件一样操作字符串,因此也有文件的很多方法
当创建的StringIO调用 close() 方法时,在内存中的数据会被丢失
BytesIO
In [17]: bio = io.BytesIO() # 创建IO |
BytesIO和 StringIO 类似,但是BytesIO操作的是 Bytes数据
使用工具
文件可以直接新建,但是现在如果需要创建文件夹和移动文件夹怎么办呢?
os 操作系统交互
os模块提供python和操作系统交互的接口
直接调用吸引命令
In [1]: import os |
通用路径操作
In [5]: os.path |
文件目录操作
In [7]: os.mkdir('text') |
os 提供了Python和操作系统交互方式,只要是和操作系统相关,就可以尝试在os模块中找方法
shutil 高级文件操作
shutil 模块提供了许多关于文件和文件集合的高级操作
引入: import shutil
copy()
功能:复制文件 |
copy2()
功能:复制文件,保留元数据 |
copyfileobj()
将一个文件的内容拷贝的另外一个文件当中 |
copyfile()
功能:将一个文件的内容拷贝的另外一个文件当中 |
copytree()
功能:复制整个文件目录 |
copymode()
功能:拷贝权限 |
copystat()
功能:拷贝元数据(状态) |
rmtree()
功能:移除整个目录,无论是否空 |
move()
功能:移动文件或者文件夹 |
which()
功能:检测命令对应的文件路径 |
disk_usage()
功能:检测磁盘使用信息 |