首页 > 编程语言 > 详细

python 子类调用 父类的构造函数

时间:2021-01-03 10:36:14      阅读:26      评论:0      收藏:0      [点我收藏+]
class A(object):
  def __init__(self):
    self.nameaa = aa
  def funca(self):
    print(function a %s % self.nameaa)
     
class B(A):
  def __init__(self):
    self.namebb = bb
   def funcb(self):
    print(function b %s % self.namebb)
     
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

结果:

================ RESTART: D:/ADB/kuaidou0102/kuaidou1210/li3.py ================
bb
function b bb
Traceback (most recent call last):
File "D:/ADB/kuaidou0102/kuaidou1210/li3.py", line 16, in <module>
print(b.nameaa)
AttributeError: ‘B‘ object has no attribute ‘nameaa‘
>>>

出错的原因:

在子类中重写了构造函数,但新的构造函数没有初始化父类,当没有初始化父类的构造函数时,就会报错

解决方法:

在子类中初始化父类的构造函数

修改后的程序如下:

class A(object):
    def __init__(self):
        self.nameaa = aa
    def funca(self):
        print(function a %s % self.nameaa)
     
class B(A):
    def __init__(self):
        self.namebb = bb
        A.__init__(self) #在子类中初始化父类的构造函数,因为在子类中重写了构造函数。如果子类中没有重写构造函数则不需要再一次初始化父类的构造函数
    def funcb(self):
        print(function b %s % self.namebb)
     
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

上面的程序结果:

================ RESTART: D:/ADB/kuaidou0102/kuaidou1210/li3.py ================
bb
function b bb
aa
function a aa
>>>

 也可以将刚才添加的“A.__init__(self)

改为:super(B,self).__init__()也会实现相同的结果

 

python 子类调用 父类的构造函数

原文:https://www.cnblogs.com/xkdn/p/14224738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!