日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的init函数里参数的作用

發布時間:2025/3/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的init函数里参数的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題發現

一直有一個疑問,有時我們在繼承時,在__init__函數會出現可變參數*arg或關鍵字參數**kw這樣的參數,這些參數有什么用?如果有用,這些參數時如何傳遞?傳遞些什么?

注:如果你不知道什么時可變參數,什么是關鍵字參數,請看這里

解決

今天一個偶然的機會,我在編寫單元測試時,發現這些參數的用處。

首先,我們來編寫一個簡單的模塊,這個模塊里有一個Dict類,它是繼承于內置類型dict,super(Dict, self).__init__()語句說明Dict用父類dict的初始化函數:

class Dict(dict):def __init__(self):super(Dict, self).__init__()

將上面的代碼存儲到一個獨立文件中,在我的實驗中,我隨意起了一個文件名mydict.py。
接著,在一個另一個新的文件中,寫下如下代碼:

from mydict import Dict a = Dict(a = 1, b = 2)

看輸出:

Traceback (most recent call last):File "G:\python\17080701.py", line 119, in <module>a = Dict(a = 1, b = 2) TypeError: __init__() got an unexpected keyword argument 'a'

輸出提示是__init__()的到了不期待的參數。很自然的,我就想起之前見過的在__init__()函數里放進可變參數和關鍵字參數。

稍微改一下,我們便可以得到答案:

class Dict(dict):def __init__(self,*arg, **kw):super(Dict, self).__init__(*arg, **kw)

此時,用一樣的代碼就可以得到期待輸入:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from mydict import Dict a = Dict(a = 1, b = 2) print(a)#output: {'a': 1, 'b': 2}

更進一步

上面的問題解決后,我們有發現了另一個問題:

繼承的類和原來的類有什么區別?

關于python對于繼承的內部機制我不懂的。只能從看的見的入手。還是用上面的mydict.py模快,用下面代碼來測試:

from mydict import Dictprint(dir(Dict)) print(dir(dict)) print(len(dir(dict))) print(len(dir(Dict))) for ine in dir(Dict):if ine not in dir(dict):print(ine) print(Dict.__dict__) print(Dict.__weakref__) print(Dict.__module__)

Dict和dict的區別就出來了:

['__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] 40 43 __dict__ __module__ __weakref__ {'__module__': 'mydict', '__init__': <function Dict.__init__ at 0x000001F74849BB70>, '__dict__': <attribute '__dict__' of 'Dict' objects>, '__weakref__': <attribute '__weakref__' of 'Dict' objects>, '__doc__': None} <attribute '__weakref__' of 'Dict' objects> mydict

注意:這都是表面的東西,關于內部機制我還沒去弄。

總結

以上是生活随笔為你收集整理的python的init函数里参数的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。