python的init函数里参数的作用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python的init函数里参数的作用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3155字,纯文字阅读大概需要5分钟。
内容图文
![python的init函数里参数的作用](/upload/InfoBanner/zyjiaocheng/594/94685b508dbd42c8938df5e6c8be62a4.jpg)
问题发现
一直有一个疑问,有时我们在继承时,在__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 Dict
print(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函数里参数的作用全部内容,希望文章能够帮你解决python的init函数里参数的作用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。