關於類函式設計的一點總結
by:授客qq:
1033553122
#!/usr/bin/env python
#-*-encoding:utf-8-*-
__author__ = 'shouke'
import os
class mytestclass:
def __init__(self):
self.file_list_for_dirpath =
# 獲取指定目錄下的檔案
def get_files_in_dirpath(self, dirpath):
if not os.path.exists(dirpath):
print('路徑:
%s不存在,退出程式
' % dirpath)
exit()
for name in os.listdir(dirpath):
full_path = os.path.join(dirpath, name)
if os.path.isdir(full_path):
self.get_files_in_dirpath(full_path)
else:
def get_file_list_for_dirpath(self):
return self.file_list_for_dirpath
obj = mytestclass()
obj.get_files_in_dirpath('e:\mygit\autotestplatform/uiautotest')
print(obj.get_file_list_for_dirpath())
執行結果:
說明:如上,
get_files_in_dirpath
函式目的是為了獲取指定目錄下的檔案,按常理是函式中定義個變數,存放結果,最後直接
return
這個變數就可以了,但是因為涉及子目錄的遍歷,
函式中通過
self.get_files_in_dirpath
對函式進行再次呼叫,
這樣一來,便無法通過簡單的
return方式返回結果了。
個人覺得比較不合理的方式就是按上面的,
「強行」在類中定義個類屬性來存放這個結果,然後再定義個函式,返回這個結果,感覺這樣設計不太好,還會增加**邏輯的模糊度。
那咋辦?個人覺得比較合理的解決方案,可以使用巢狀函式。如下:
#!/usr/bin/env python
#-*-encoding:utf-8-*-
__author__ = 'shouke'
import os
class mytestclass:
def __init__(self):
pass
# 獲取指定目錄下的檔案
def get_files_in_dirpath(self, dirpath):
file_list_for_dirpath =
def collect_files_in_dirpath(dirpath):
nonlocal file_list_for_dirpath
if not os.path.exists(dirpath):
print('路徑:
%s不存在,退出程式
' % dirpath)
exit()
for name in os.listdir(dirpath):
full_path = os.path.join(dirpath, name)
if os.path.isdir(full_path):
collect_files_in_dirpath(full_path)
else:
collect_files_in_dirpath(dirpath)
return file_list_for_dirpath
obj = mytestclass()
print(obj.get_files_in_dirpath('e:\mygit\autotestplatform/uiautotest'))
執行結果:
關於類庫函式設計中的一點哲學
在類庫中很多函式設計很巧妙,至今我還在體會他們的設計哲學是怎麼樣的,比如關於linkedlist的,裡面有乙個函式 public e getfirst 返回第乙個元素,如果之前我沒看過這段 的話,讓我自己寫的話,我可能會返回乙個null值,但類庫里是丟擲乙個異常。很多類庫的函式 比如remove操作...
關於python的類
class person def setname self,name self.name name def getname self return self.name def greet self print hello world my name is s self.name foo person...
Python 關於類和函式的常見問題
arg和 kwarg用法 args 可以理解為只有一列的 長度不固定 kwargs 可以理解為字典,長度也不固定 參考 python初學者筆記 五 白話講 arg和 kwarg,你看不懂算我笨!super init 繼承父類 python3.x 和 python2.x 的乙個區別是 python 3...