為了把類中的變量傳遞給類中的函數,我們需要用到3個特定格式
福海網站建設公司創新互聯,福海網站設計制作,有大型網站制作公司豐富經驗。已為福海上千家提供企業網站建設服務。企業網站搭建\外貿網站制作要多少錢,請找那個售后服務好的福海做網站的公司定做!
① 第一個格式 @classmethod 的中文意思就是“類方法”,@classmethod聲明了函數1是類方法,這樣才能允許函數1使用類屬性中的數據。
② 第二個格式 cls 的意思是class的縮寫。如果類方法函數1想使用類屬性(也就是類中的變量),就要寫上cls為函數1的第一個參數,也就是把這個類作為參數傳給自己,這樣就能被允許使用類中的數據。
③ 第三個格式是 cls.變量 。類方法想使用類屬性的時候,需要在這些變量名稱前加上cls. 這就好比類方法和類之間的約法三章,所以但凡有任何格式錯誤都會報錯。
如果缺①,即缺了“@classmethod”,類方法就不能直接利用類中的屬性,于是報錯
涉及到狀態保存,可以使用函子(書上這么翻譯的,不曉得其他人是不是也這樣叫),給你個例子,你比對著改。如果不懂,自己再延這個方向去查看資料。
class?Strip:
def?__init__(self,?characters):?#初始化,將需要保留的狀態信息存起來
self.characters?=?characters
def?__call__(self,?string):?#創建的函子被使用時,自動調用__call__
return?string.strip(self.characters)
#下面是使用方法,兩個語句是密切銜接的。
strip_punctution?=?Strip(',;:.!?')?#字符串參數將被__init__吃進去,并且保留在class中,
#相當于一種狀態保存的方法,在你的例子中,你可以將用戶表達式通過這種方式保存起來
strip_punctution('hello?world!')?#return?'hello?world',他的功能是剝離characters
#字符串中出現的字符,此處把感嘆號去掉了,
#這就是函子典型的使用方法,class中的__call__函數被自動調用,在你的
#例子中,你可以通過這樣的方式調用函數,就不用每次重新輸入表達式了。
一般來說,Python程序員可能是這樣寫main()函數的:
"""Module docstring.
This serves as a long usage message.
"""import sysimport getoptdef main():
# parse command line options
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"]) except getopt.error, msg: print msg print "for help use --help"
sys.exit(2) # process options
for o, a in opts: if o in ("-h", "--help"): print __doc__
sys.exit(0) # process arguments
for arg in args:
process(arg) # process() is defined elsewhereif __name__ == "__main__":
main()1234567891011121314151617181920212223242526
Guido也承認之前自己寫的main()函數也是類似的結構,但是這樣寫的靈活性還不夠高,尤其是需要解析復雜的命令行選項時。為此,他向大家提出了幾點建議。
添加可選的 argv 參數
首先,修改main()函數,使其接受一個可選參數 argv,支持在交互式shell中調用該函數:
def main(argv=None):
if argv is None:
argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234
這樣做,我們就可以動態地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
# etc.12
這是因為在調用函數時,sys.argv 的值可能會發生變化;可選參數的默認值都是在定義main()函數時,就已經計算好的。
但是現在sys.exit()函數調用會產生問題:當main()函數調用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數的返回值指示退出狀態(exit status)。因此,最后面的那行代碼就變成了這樣:
if __name__ == "__main__":
sys.exit(main())12
并且,main()函數中的sys.exit(n)調用全部變成return n。
定義一個Usage()異常
另一個改進之處,就是定義一個Usage()異常,可以在main()函數最后的except子句捕捉該異常:
import sysimport getoptclass Usage(Exception):
def __init__(self, msg):
self.msg = msgdef main(argv=None):
if argv is None:
argv = sys.argv try: try:
opts, args = getopt.getopt(argv[1:], "h", ["help"]) except getopt.error, msg: raise Usage(msg) # more code, unchanged
except Usage, err: print sys.stderr, err.msg print sys.stderr, "for help use --help"
return 2if __name__ == "__main__":
sys.exit(main())123456789101112131415161718192021222324
這樣main()函數就只有一個退出點(exit)了,這比之前兩個退出點的做法要好。而且,參數解析重構起來也更容易:在輔助函數中引發Usage的問題不大,但是使用return 2卻要求仔細處理返回值傳遞的問題。
print?'main'當腳本作為執行腳本時__name__的值為__main__當腳本作為模塊時__name__為模塊文件名。
main函數在程序中大多數是必須存在的。C語言標準中強制要求main函數的返回值類型為int,main函數的返回值是傳遞給操作系統,讓操作系統判斷程序的執行情況。
一個程序,無論復雜或簡單,總體上都是一個“函數”;這個函數就稱為“main 函數”,也就是“主函數”。比如有個“做菜”程序,那么“ 做菜 ”這個過程就是“主函數”。在主函數中,根據情況,你可能還需要調用“買菜,切菜,炒菜”等子函數。
main函數在程序中大多數是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個動態鏈接庫模塊,這是其他windows程序可以使用的代碼。由于DLL模塊不是獨立的程序,因此不需要main函數。
從函數的形勢看,函數分兩類:
無參函數。printstar和print_message就是無參函數。在調用無參函數時,主調函數并不將數據傳送給被調用函數,一般用來執行指定的一組操作。
有參函數。在調用函數時,在主調函數和被調用函數之間有數據傳遞。也就是說,主調函數可以將數據傳遞給被調用函數使用,被調用函數中的數據也可以帶回來供主調函數使用。
一、主體不同
1、類:是面向對象程序設計實現信息封裝的基礎。
2、函數:是指一段在一起的、可以做某一件事兒的程序。也叫做子程序、(OOP中)方法。
二、特點不同
1、類:是一種用戶定義的引用數據類型,也稱類類型。每個類包含數據說明和一組操作數據或傳遞消息的函數。類的實例稱為對象。
2、函數:分為全局函數、全局靜態函數;在類中還可以定義構造函數、析構函數、拷貝構造函數、成員函數、友元函數、運算符重載函數、內聯函數等。
三、規則不同
1、類:實質是一種引用數據類型,類似于byte、short、int(char)、long、float、double等基本數據類型,不同的是它是一種復雜的數據類型。
2、函數:函數必須聲明后才可以被調用。調用格式為:函數名(實參)調用時函數名后的小括號中的實參必須和聲明函數時的函數括號中的形參個數相同。
參考資料來源:百度百科-函數
參考資料來源:百度百科-類
分享文章:python類中寫函數,python怎么寫函數
轉載源于:http://vcdvsql.cn/article20/hshejo.html
成都網站建設公司_創新互聯,為您提供靜態網站、品牌網站制作、品牌網站建設、網站建設、虛擬主機、動態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯