初始化方法&继承:
class Test:
def __init__(self): #1、初始化方法,类似java中的构造函数,应用于在调用 类时,需要传的参数。如此处,将add中用到的参数 a,b放在此处
self.a=a #2、此处self的功能,是将私有的变成共有的,所以add函 数调用的时候,就需要使用self.a
self.b=b
def add(self):
return self.a+self.b
def test_add(self):
return self.add() #3、使用当前类中的add方法,要表明当前类: self.add()
print(Test(2,3).test_add())
class Test2(Test):
def sub(self):
return self.a-self.b
print(Test2(8,2).test_add()) #4、继承
导入包/引包:
修改包的名称:
from time import ctime,sleep as sys_sleep #将sys_sleep
print(ctime())
sys_sleep(3)
print(ctime())
引包<第3方>原理,以selenium的webdriver来讲述:
from selenium import webdriver #1、引用的路径目录>文件>类>方法
dr = webdriver.Chrome()
思路:
selenium目录,该目录下有webdriver目录,但没有Chrome
查看:__init__.py文件
显示:from .chrome.webdriver import WebDriver as Chrome # noqa
查看当前文件的chrome的webdriver.py中的WebDriver类。
所以也可以写成:
from selenium.webdriver.chrome.webdriver import WebDriver
dr = WebDriver()
引包<自定义>:
python引包规则:
1、先找当前目录下的同名目录/文件
2、python安装目录下的文件
3、环境变量PATH下的目录
1)被调用对象在同个目录下(count.py 和est_count.py在相同目录下):
-----------------------count.py(被调用):
def add(a=3,b=2):
return a + b
# print(add())为测试代码
if __name__=='__main__': #下面的代码,别人调用时,不会被执行
print(add())
-----------------------test_count.py(调用者):
import count
c=count.add(10,20)
print(c)
2)被调用对象在下级目录中(count.py 在aaaa的目录中,aaaa与test_count.py在相同目录下):
ps:{python3引包时,会产生1个文件夹__pycache__(与python2的区别是,不能将原文件删除);python2引包时,会产生1个文件.pyc(此文件是被调用的文件编译生成的,可以将原文件删除,也可以执行成功)}
-----------------------test_count.py(调用者):
from aaaa import count
注:文件关系:
aaaa的目录中存在count.py,new_count.py(有调用count.py)
aaaa与test_count.py在相同目录下
test_count.py调用new_count:from aaaa import new_count.py #执行失败,因为未 在aaaa目录下找到count
解决方式1:采用相对引用:new_count.py 中修改:from .count import add #在new_count.py 的所在目录下,找到count目录
问题1:但解决方式1,导致new_count.py本身无法运行,提示SystemError
终极解决方式:解决问题1:在new_count.py中采用错误异常判断:
try:
from .count import add
except SystemError:
from count import add
#若调用from .count import add产生错误,则使用from count import add
3)被调用对象在上级目录中?
4)软调用,即使用程序,将文件添加到PATH目录下:
import sys
#print(sys.path)
sys.path.append("./aaaa")
#print(sys.path)
from aaaa import new_count
异常处理:
try:
执行命令
except 执行命令可能会出现的异常(如:NameError,FileNotFoundError) as msg:
print(msg)
异常类的附属关系:BaseException>Exception>其他具体类型的error。
try:
执行命令
except Exception as msg:
print("有异常")
else:
print("没有异常")
#
try:
执行命令
except Exception as msg:
print("有异常")
finally:
print("不管有没有异常,都会被执行")
#抛异常?不懂有什么用:
from random import randint
number=randint(1,9)
if number % 2==0:
raise NameError("%d is even" %number)
else:
raise NameError("%d is odd" %number)