特殊属性和方法
分类 | 名称 | 说明 |
---|---|---|
特殊属性 | _ _ dict_ _ | 获得对象或实例对象所绑定的所有属性和方法的字典 |
特殊方法 | _ _ len_ _() | 通过重写_ _ len_ _()方法让内置函数len()的参数可以是自定义函数 |
特殊方法 | _ _ add_ _() | 通过重写_ _ add_ _()方法,可以使用自定义对象具有“+”的功能 |
特殊方法 | _ _ new_ _() | 用于创建对象 |
特殊方法 | _ _ init_ _() | 对对象的创建进行初始化 |
查看对象的所有的属性和方法 ------dir(obj)
注意:
- add方法调用可以直接 stu = stu1 + stu2 或者 stu = stu1 .add(stu2)
- list列表中有一个方法为len(list)底层是调用了_ _ len _ _()方法
例子:
init方法和new方法:
class Person:
def __init__(self,name,age):
print('iniy方法被调用,id为{0}'.format(id(self)))
self.name = name
self.age = age
def __new__(cls, *args, **kwargs):
print("__new__被调用,class的id为{0}".format(id(cls)))
obj = super().__new__(cls)
print('创建对象的id为{0}'.format(id(obj)))
return obj
if __name__ == '__main__':
pr = Person('张三',18)
- Person------->new(cls...)------>super()._ new _(cls)<创建对象>-------self ----->init------p1
类的浅拷贝与深拷贝
- 变量的赋值操作
- 只是形成两个变量,实际上还是指向同一个变量
- 浅拷贝
- python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,原对象与拷贝对象会引用同一个子对象
- 深拷贝
- 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不同
1.变量的赋值
class Cpu:
pass
class Up:
pass
class Computer:
def __init__(self,cpu,up):
self.cpu=cpu
self.up=up
cpu1 = Cpu()
cpu2 = cpu1
print(cpu1)
print(cpu2)
<__main__.Cpu object at 0x0000021961583250>
<__main__.Cpu object at 0x0000021961583250>
一个对象放到了两个变量中
2.浅拷贝
class Cpu:
pass
class Up:
pass
class Computer:
def __init__(self,cpu,up):
self.cpu=cpu
self.up=up
co = Computer(Cpu(),Up())
import copy
co2=copy.copy(co)
print(co,co.cpu,co.up)
print(co2,co2.cpu,co2.up)
3.深拷贝
class Cpu:
pass
class Up:
pass
class Computer:
def __init__(self,cpu,up):
self.cpu=cpu
self.up=up
co = Computer(Cpu(),Up())
import copy
co2=copy.deepcopy(co)
print(co,co.cpu,co.up)
print(co2,co2.cpu,co2.up)
模块
函数与模块的关系:
- 一个模块可以包含多个函数
在python中一个扩展名为.py的文件就是一个模块
使用模块的好处:
- 方便其他程序和脚本的导入并使用
- 避免函数名和变量名发生冲突
- 提高代码的可维护性
- 提高代码的可重用性
模块:
- 函数
- 类
- 类属性
- 类实例方法
- 类方法
- 类静态方法
- 语句
模块的导入
- import 模块名称 [as 别名]
- from 模块名称 import 函数/变量/类 导入指定的内容
例子:
一:
import math
print(math.pi)
二:
from math import pi
print(pi)
已主程序的方式运行
if __name__ == '__main__':
pass
python中包的概念
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:
- 代码规范
- 避免模块名称冲突
包与目录的区别:
- 包含_ _ init _ _.py文件的目录称为包
- 目录里面通常不包含_ _ init_ _.py文件
包的导入:
import 包名.模块名
python中的内置模块
模块名字 | 描述 |
---|---|
sys | 与python解释器及其环境相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统服务功能的标准库 |
calendar | 提供了与日期相关的各种函数的标准库 |
urllib | 用于读取王珊(服务器)的数据的标准库 |
json | 用于使用JSON序列化和反序列化对象 |
re | 用于字符串中执行正则表达式 |
math | 提供标准算数运算函数的标准库 |
decimal | 用于进行精确控制运算符精确度、有效数位和四舍五入操作的十进制运算 |
logging | 提供了灵活的记录时间、错误、警告、和测试报告信息等日志的功能 |
第三方模块
安装:
pip install 模块名
使用:
import 模块名
文件操作
- Python的解释器使用的是Unicode(内存)
- .py文件在磁盘上使用UTF-8存储(外存)
文件读写的原理
- 文件的读写俗称IO流
- 文件读写操作流程
- 操作原理
- python操作文件
- 打开或新建文件
- 读写文件
- 关闭资源
内置函数open()创建文件对象
语法规则:
file = open(filename[,mode,encoding])
- file 被创建文件对象
- open创建文件对象的函数
- filename 要创建或打开文件的名称
- mode 打开模式默认为只读
- encoding 默认文本文件中字符编码格式为GBK
常用的文件打开模式
文件的类型:
- 按照文件中数据组织形式,文件分为以下两大类:
- 文本文件:存储的数普通的字符文本,默认的编码为Unicode字符集,可以用记事本程序打开
- 二进制文件:把数据内容用字节进行储存,无法用记事本打开,必需使用专用的软件打开,例如,mp3、音乐文件
打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在则覆盖原有的内容,文件指针在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则文件末尾追加内容,文件指针在原文件末尾 |
b | 以二进制的方式打卡文件,不能单独使用,需要和其他模式一起使用,rb 或 wb |
+ | 以读写的方式打开文件,不能单独使用,需要和其他的模式一起使用, a+ |
file=open('a.text','w',encoding='utf-8')
file.write('郝泾钊')
文件对象的常用方法
方法名 | 说明 |
---|---|
read([size]) | 从文件中读取size个字符或字符内容返回。省略[size]则读取到文件末尾,即一次读取所有内容 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为一个独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将字符串str写入文件 |
writerlines(s_list) | 把字符串列表s_list写入文本文件,不添加换行符 |
seek(offset[,whence]) | 把文件指针移动到新的位置,offer表示相对于whence的位置:offset:为正往往结束的方向移动,为负往开始的方向移动 |whence不同的值代表不同的含义|0从文件头开始计算(默认值)|1:从当前位置开始计算|2:从文件尾开始计算 |
tell() | 返回文件指针的当前位置 |
flush() | 把缓冲区的内容写入文件,但是不关闭文件 |
close() | 把缓存取的内容写入文件,同时关闭文件,释放文件都西安那个相关的资源 |
With上下文管理器
with语句可以自动管理上下文资源,无论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
with open('a.text','r') as file:
print(file.read())
os模块
- os模块是python内置的于操作文件系统功能和文件系统线管的模块,该模块中的语句的执行结果于操作系统有关,在不同的操作系统上运行,得到的结果可能不一样
- os模块与os.path模块用于对目录或文件进行操作
例子:
打开记事本:
import os
os.system('notepad.exe')
打开计算器:
import os
os.system('notepad.exe')
直接去调用可执行文件:
import os
os.startfile('D:\program files (x86)\Tencent\QQ\Bin\QQ.exe')
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mldir(path[,mode]) | 创建目录 |
makedirs(path1/path2....[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2....[,mode]) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
os.path模块
函数 | 说明 |
---|---|
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在,如果存在返回True,否则返回Flase |
join(path,name) | 将目录与目录或则文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取出文件名 |
dirname(path) | 从一个路径中提取出文件路径,不包括文件名 |
isdir(path) | 用于判断是否为路径 |
标签:__,文件,self,up,模块,path,属性 来源: https://www.cnblogs.com/HJZ114152/p/16441591.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。