python 构造函数传入多变量

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
以上是全部内容,如果有更好的见解,欢迎留言!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值