类中定义方法要带参数
self
,类中访问属性要用self.属性
,self
类似于Java中的this
__init__()
方法,相当于Java中的构造方法__str__()
方法,相当于Java中的toString()方法for循环
加上else
,for循环
执行完后会执行else
类中加
__
的属性和方法,相当于Java中用private
声明__del__()
方法,相当于Android中activity的destroy()
方法
- 多继承,如果父类马和父类驴有一个同名方法,那么子类骡子调用先继承的那个
luozi.__mro__ #查看子类骡子的对象调用继承方法的先后顺序
Python设置私有属性或方法的方式其实是改名字,只要在私有属性或方法前加上
_类名
(一个下划线)就可以调用了dir(类名)
可以查看该类的私有方法类属性,相当于Java中的静态变量
通过对象不能直接修改类属性,只会新建一个同名的实例属性类方法——用修饰器
@classmethod
来标识,第一个参数必须是类对象,一般以cls
作为第一个参数静态方法——需要通过修饰器
@staticmethod
来进行修饰,静态方法不需要定义参数
__new__(cls)
方法,至少要有一个参数cls,代表实例化的类;至少要有返回值,返回实例化后的实例。
__new__(cls)
方法,相当于Java中new Object()
__init__(self)
方法中的self
,就是__new__(cls)
方法返回的实例单例模式——只有一个对象,只执行一次
__new__
方法,只执行一次__init__
方法捕获所有异常
try:
num = 100
print num
except Exception as errorMsg: #获取异常的信息描述
print('产生错误了:%s'%errorMsg)
else: #如果没有捕获异常,执行else语句
print('没有捕获到异常,真高兴')
- Python用
raise
抛出一个异常,异常 / 错误继承Exception类 / Error类
-
__name__
作为Python脚本直接执行,值是脚本名;被导入执行,值是main
。
if __name__ = 'main':
print('这是测试')
通过__name__
可以选择性执行测试代码
from...import
从模块中导入一个指定的部分到当前命名空间中as
重命名导入的模块要想导入不同目录下的模块,一般需要修改system模块的sys.path变量
import sys
sys.path.insert(0,'/home/python/Desktop/bd/test')
print(sys.path)
import test
test.test()
- 重新导入模块
模块被导入后,import
不能重新导入,重新导入需用reload(test)
- 如果一个文件中有
__all__
变量,那么也就意味着这个变量中的元素,不会被from xxx import *
时导入 - 创建
__init__.py
文件,将同一个文件夹下有联系的模块组织在一起,成为包。
__init__.py
文件,可以定义__all__
变量,控制from 包名 import ...
导入的模块,也可以编写内容执行。
包可以嵌套
- 获取给程序传递的参数
import sys
print(sys.argv)
if sys.argv[1] != '':
print('第一个参数为%s',sys.argv[1])
列表推导式——轻量级循环列表,概念上类似于Java中的匿名对象
使用集合set,可以快速的完成对list中的元素去重复的功能