Python学习日记(十五)
构造和析构
构造:
- __init__(self)
- 一般要对某个类进行初始化时才会重写__init__函数
- 魔法方法总是被双下划线包围,比如__init__
- __init()__返回类型为None所以不能在__init__函数中return
- __new()__(cls[,...])
- 实例化对象时第一个调用的方法,返回一个对象
- 当我们继承一个不可变类时又要进行修改时可重写次方法,不然一般不用重写
-
class CapStr(str): def __new__(cls,string): string=string.upper() return str.__new__(cls,string) a=CapStr("i love you") print(a) I LOVE YOU
析构:
- __del__(self)
- 并不是del时就调用del方法,只有当最后一个对象被del时才会
- 当对象要被销毁时会自动调用此方法,即一个垃圾回收机制,当没有任何变量去引用某个对象时,就自动调用此方法销毁对象
-
>>> class C: def __init__(self): print("我是__init__") def __del__(self): print("我是__del__") >>> a=C() 我是__init__ >>> b=a 我是__del__ >>> c=a >>> del b >>> del c >>> del a 我是__del__
模块
- 容器:对数据的封装;函数:语句的封装;类:方法和属性的封装;模块:程序(代码 )的封装
- 可实现代码的重用(一个模块重复使用)
- 导入模块:import 模块名 ;import 模块名 as 新名字
- 调用模块方法:模块名.方法名();新名字.方法名()
- __ name__ = '__ main__'
- 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
-
# p13_7.py def c2f(cel): fah = cel * 1.8 +32 return fah def f2c(fah): cel = (fah - 32) / 1.8 return cel def test(): print("测试,0摄氏度 = %.2f 华氏度" % c2f(0)) print("测试,0华氏度 = %.2f 摄氏度" % f2c(0)) if __name__ == '__main__': test()
- 搜索路径
- 写好的模块应该放在哪里?我们可以放在和导入这个模块文件的源代码同一个文件夹内,还可以自己定义路径。
-
>>> import sys >>> sys.path ['', '/Users/liujin/Documents', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/easygui-0.98.0_UNRELEASED-py3.7.egg'] >>> sys.path.append('/Users/liujin/Documents/virtualenv3.7Demo/ven2') >>> sys.path ['', '/Users/liujin/Documents', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/easygui-0.98.0_UNRELEASED-py3.7.egg', '/Users/liujin/Documents/virtualenv3.7Demo/ven2'] >>> import p13_7 as tc >>> print("32摄氏度 = %.2f 华氏度" % tc.c2f(32)) 32摄氏度 = 89.60 华氏度 >>>
- 包
- 1??创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
2??在文件夹中创建一个__ init__.py模块文件,内容可以为空;
3??将相关的模块放入文件夹中。 -
下面就是从M1包中导入p13_7模块: