——早上07:30到达实验室,开始学习,中秋小长假已过,心已收——
class Person(object): def __new__(cls,*args,**kwargs): *表示位置参数,**表示关键字参数 print('__new__被调用执行了,cls的id值为{0}'.format(id(cls))) obj=super().__new__(cls) 调用父类的函数给实例对象 print('创建的对象的id为:{0}'.format(id(obj))) return obj def __init__(self,name,age): print('__init__被调用了,self的id值为:{0}'.format(id(self))) self.name=name self.age=age print('object这个类对象的id为{0}'.format(id(object))) print('Person这个类对象的id为{0}'.format(id(Person))) p1=Person('张三',20) print('id值为{0}'.format(p1))
这方面的有点难理解,但就是一个传参的过程 等我再上网查一查做出详细解释
class CPU: pass class Disk: pass class Computer: def __init__(self,cpu,disk): self.cpu=cpu self.disk=disk cpu1=CPU cpu2=cpu1 print(id(cpu1)) print(id(cpu2))
id值是相同的,说明是同一个对象分别放在不同的对象中去
赋值操作:只是形成两个变量,实际上还是指向同一个对象
浅拷贝:对象包含的子对象内容不拷贝,源对象和拷贝对象会引用同一个子对象
举例:
class CPU: pass class Disk: pass class Computer: def __init__(self,cpu,disk): self.cpu=cpu self.disk=disk cpu1=CPU cpu2=cpu1 print(id(cpu1)) print(id(cpu2)) print(cpu1) print(cpu2) disk=Disk() computer=Computer(cpu1,disk) print(disk) import copy computer2=copy.copy(computer) print(computer,computer.cpu,computer.disk) print(computer2,computer2.cpu,computer2.disk)
从这个例子中我们知道,这个浅拷贝她不拷贝的是,value,即cpu的实力对象与disk的值
而只拷贝的源对象,所以源对象的id值就会更改。
使用copy模块中的deepcopy模块,
computer3=copy.deepcopy(computer) print(computer3,computer3.cpu,computer3.disk)
模块英文名:Modules
一个模块包含N多个函数
拓展名为.py的文件就是一个模块
说白了,模块可以类、函数、语法结构,且模块与模块之间不会有影响,因为这是多个不同的文件
3.2.1 创建模块需要注意:
新建的.py文件,名称尽量不要与python自带的标准模块名称相同
3.2.2导入模块
import 模块名称 [as 别名]
from 模块名称 import 函数/变量/类
import math #导入的是数学运算模块
print(id(math))
print(type(math))
print(math)
print(math.pi)
秉承着好奇的心里输入了下 print(value(math))
结果报错,为什么呢?
value针对的是 函数和对象,它是一个模块,因此没有方法和属性。
用dir()函数可查看模块中的属性和函数
print(dir(math))
再调用下math中的函数
————睡了午觉,睡得很饱,现在是14:12 开始学习————
我们来看一看第二种导入模块的方式
from 模块名称 import 函数/变量/类
第一种是:
import math
print(math.pi)
第二种是:
from math import pi print(pi)
from math import pi import math print(pi) print(pow(2,3)) print(math.pow(2,3))
综上第一种方式是导入所有,第二种方式是导入指定的内容
设定模块叫calc模块,把你编辑的函数放入里面
这就是结果 接下来的图片是导入的第二种方法:
3.4 以主程序的形式运行
我先是自定义一个模块,命名为calc2
接着我在另外一个模块中进行调用执行,发现结果多了上个模块中的程序结果
怎么办?这样办 需要在print上面写上main,然后按下Enter 即可。
就不是主程序了呗,不然一直会有它模块里面的结果
import 包名.模块名
先来个建包的过程:
其次在包里面我写上一个参数a=10,在moduleB里面写上b的参数20
最后我在外面写上一个模块命名为demo5,导入包,运行结果为20即a的值
import pageage1.module_A #包名为pageage1 模块名为module_A print(pageage1.module_A.a) 模块里面的参数或者函数
但这么写太累了吧,所以可以起个别名 在后面写上as 名字
import 包名.模块名 别名 名字
import pageage1.module_A as b print(b.a)
这里的b是我们这个包里模块的别名 不错不错!
导入带有包的模块时注意事项:
import pageage1 以及 import calc
使用import方式进行导入时,只能跟包名或者模块名
但是使用 from pageage1 import modele_A 这种import只能导入模块名
from pageage1.modele_A import a 导入变量
使用from...import 可以导入包 模块 函数 变量
import sys print(sys.getsizeof(24))
import time print(time.time()) print(time.localtime(time.time()))
import urllib.request print(urllib.request.urlopen('http://www.baidu.com').read())
第三方模块的安装
pip install 模块名
第三方模块的使用
import 模块名
首先打开win+R 输入cmd 然后 pip install 模块名 →python→import 模块名 没有报错那么就可以调用了
导入模块,然后如果在cmd中安装好了的话,没有报错,但是在环境中依然报错,就去找解释器的适配是不是出问题了。
第三方模块:安装:pip install 模块名 使用:from...import...模块名
Python的解释器使用的是Unicode(内存)
.py文件在磁盘上使用的是UTF-8储存(外存)
内置函数open()创建文件对象
语法规则:file = open(filename [,mode,encoding])
被创建的文件对象=创建文件对象的函数(要创建或打开的文件名称[打开模式默认为只读,默认编写格式为gbk])
读 :是从外部文件file到程序里面
写 :是从程序输出到文件之中
file=open('a.txt.txt','r') 这里的r表示读取的意思 print(file.readline()) readline也是读的意思 file.close() 关闭文件夹
r:以只读模式打开文件
w:以只写模式打开文件,如果文件不存在就创建,若文件存在就会覆盖原有内容
a:追加模式打开文件,若文件不存在就创建,若存在就在文件末尾追加内容
b:以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb或者wb‘
src_file = open('logo.png','rb')
target_file=open('copylogo.png'.;wb')
target_file.write(src_file.read())
target_file.close()
src_file.colse()
+:以只读方式打开文件,不能单独使用,需要与其他模式一起使用,a+
file=open('b.txt.txt','w') 创建一个文件命名为b格式为txt,为写的内容 file.write('helloworld') 写的内容为helloworld file.close() 文件关闭
在左侧找到内容为helloworld
但是写的内容为文字的话就需要用gbk
试一试 a 有内容开始追加,没有的话就创建
文件对象的常用方法:
read([size]):从文件中读取size个字符的内容返回,若省略则读到末尾
readline() :从文本读取一行内容
readlines():文件中每一行都作为独立的字符串对象,将这些对象放入列表返回
write(str):将字符串写入文件
writelines(s_list):将字符串列表s_list写入文本文件,不添加换行符
————差不多到这里已经学完,剩下来的课程我会每天学习三节课或者一小时。——-