Python,子级无法从父级继承函数

时间:2020-04-23 18:21:19

标签: python

我创建了一个python代码,其中Apple是父类,而Macbook是子类。 如下所述,我无法从mackbookpro实例调用background()函数。 出现错误:AttributeError:“ Macbook”对象没有属性“ year_builted”。

如果我从__init__函数中声明 year_founded ,则效果很好。

为什么我不能在子组件实例处获取父构造函数中提到的数据?

class Apple:

    # year_established=1976 --code run successfully if I declare value here  
    # -- but I commented out

    def __init__(self):
        self.year_established=1976

    def background(self):
        return ('it is established in {}'.format(self.year_established))

class Macbook(Apple):

    def __init__(self):
        self.price = 10000

    def productdetails(self):
        return (str(self.price) + self.background())

macbookpro = Macbook()

print(macbookpro.productdetails())

2 个答案:

答案 0 :(得分:2)

您需要将父类初始化器调用到子类初始化器,例如:

class Apple:
    def __init__(self):
        self.year_established = 1976

    def background(self):
        return ('it is established in {}'.format(self.year_established))


class Macbook(Apple):
    def __init__(self):
        super().__init__()
        self.price = 10000

    def productdetails(self):
        return (str(self.price) + self.background())


macbookpro = Macbook()

print(macbookpro.productdetails())

答案 1 :(得分:1)

使用由Base-Class (or iterface) / Inherit-Class插入的Child / Parent,它将描述本示例中的类的“所有权”

class Apple:
    def __init__(self, parent=None):
        self.parent = parent

class Macbook(Apple):

    def __init__(self, **kwargs):
        super(Macbook, self).__init__(**kwargs)

macbookpro = Macbook()
macbookpro_child = Macbook(parent=macbookpro)

当类继承基并且在基类中已经存在方法而不会更改该方法时,super()方法在python中产生的原因是该方法将不会更改,在其他语言中,这是不同的,因为它会覆盖de基本类忽略了重复。 要解决此问题,超级调用原始方法,并且可以在__init__()中的任何时候完成此操作,请注意,从基类中放置的任何方法都具有超级。 (需要传递self来给出超级执行哪个类的上下文)

嘲笑旧的超级方法可能会更直观

class Macbook(Apple):
    def __init__(self):
        Apple.__init__(self)

这是带有超级代码的代码

class Apple:
    def __init__(self):
        self.year_established = 1976

    def background(self):
        return 'it is established in {}'.format(self.year_established)

class Macbook(Apple):

    def __init__(self):
        super(Macbook, self).__init__()
        self.price = 10000

    def product_details(self):
        return str(self.price) + self.background()

macbookpro = Macbook()

print(macbookpro.product_details())