python子类继承父类属性实例_python子类继承父类,子类添加属性?

正好刚学到这里,也正好刚解答了一个网上类似的问题。

就像其他帖子里说的,提示里已经说明了是你所传实参数目和给定形参数目不匹配造成的。

我可以还原一个比较常犯的错误代码案例:

# 父类

class Car():

"""Simulate a car"""

def __init__(self,make,model,year):

---snip---

# 子类

class ElectricCar(Car):

"""Simulate an electric car"""

def __init__(self,make,model,year,xyz):

super().__init__(make,model,year)

self.xyz = 0

如果你运行这段代码,也会提示几乎一样的错误。

可以看出,他的初始目的应该是ElectricCar类继承Car类,并添加一个新的属性xyz,赋默认值为0。这个逻辑没有问题,但是他写的方式有问题。

这种情况只有2种写法:

def __init_(self,make,model,year,xyz=0):

super().__init__(make,model,year)

self.xyz = xyz

def __init_(self,make,model,year):

super().__init__(make,model,year)

self.xyz = 0

也就是说,如果你像通过self.xyz = 0给新增的xyz属性赋默认值0,那么括号里就不要添加形参xyz,不然会多算一个形参;而如果你想在括号里直接赋值,那么下面就写成self.xyz = xyz。

保持括号里的和下面的始终都表示同一个形参而非两个。问题就解决了。

感谢季同学和我的讨论,这是能快速总结出上述情形的直接原因,虽然你不玩知乎也看不到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值