python 构造函数传入多变量
python构造函数中可以使用**
来(以字典的方式)传递多变量:
(使用元组传递也可以,只需要将**
改成*
就可以了,但是元组传入时只能按照序号来进行索引,所以本文只分析更加方便的字典传值方式)
例如:
class A:
def __init__(self,**d):#**可以传入多参数,需要使用键值对的形式
self.a = d
c = A(e=2, f=3)#传入时的方式(键值对)
print('e = ' + str(c.a['e']))
输出结果为:
e = 2
紧跟在代码之后,我们加上这一行代码来查看类中属性所得到的值:
print(c.a)
我们会发现,实际上类中属性a得到的是python中的字典:
{'e': 2, 'f': 3}
于是继承时可能想当然地直接将字典传入(大错特错!)
要注意:符号**
不可以省略!!!!
#错误的代码!
#错误的代码!
#错误的代码!
class A:
def __init__(self,**d):
self.a = d
#子类B继承于A
class B(A):
def __init__(self,**e):
super().__init__(e) #此处"e"前没有"**"会报错!!!想当然了!!!
c = B(e=2, f=3)
print('e = ' + str(c.a['e']))
运行时报错:
TypeError: __init__() takes 1 positional argument but 2 were given
继承时一定要注意不能忘记使用**
:
#正确的代码!
#正确的代码!
#正确的代码:
class A:
def __init__(self,**d):
self.a = d
#子类B继承于A
class B(A):
def __init__(self,**e):
super().__init__(**e) #此处"e"前有"**"不会报错!!!
c = B(e=2, f=3)
print('e = ' + str(c.a['e']))
输出结果为:
e = 2