Python - 面向对象。子类不从父类继承

时间:2017-06-06 15:49:06

标签: python oop inheritance

免责声明:这是我第一次涉足OOP,所以如果我对问题的解释不是很清楚,我很抱歉。我尽我所能,但这个术语对我来说还是新的。

您好。我正在学习面向对象编程的初学Python教程。本教程是关于Parent和Child类的,以及Child类如何从Parent继承属性。

为了解释这个原理,导师讨论了如何使用父类和几个不同子类之间的关系来创建不同类型的硬币。 Parent类叫做Coin'。儿童班叫做庞德(我来自英国,因此我们使用的是英国硬币)。

import random

class Coin:
    def __init__(self, rare = False, clean = True, heads = True, **kwargs):
    for key,value in kwargs.items():
        setattr(self,key,value)


    self.is_rare = rare
    self.is_clean = clean
    self.heads = heads

    if self.is_rare:  # In the tutorial, rare coins are worth more than 
        self.value = self.original_value * 1.25
    else:
        self.value = self.original_value

    if self.is_clean:
        self.colour = self.clean_colour
    else:
        self.colour = self.rusty_colour

    def rust(self):
        self.colour = self.rusty_colour

    def clean(self):
        self.colour = self.clean_colour

    def __del__(self):
        print("Coin Spent!")

    def flip(self):
        heads_options = [True, False]
        choice = random.choice(heads_options)
        self.heads = choice

class Pound(Coin):
    def __init__(self):
        data = {
            "original_value": 1.00,
            "clean_colour": "gold",
            "rusty_colour": "greenish",
            "num_edges": 1,
            "diameter": 22.5,
            "thickness": 3.15,
            "mass": 9.5
            }
        super().__init__(**data)

当我运行此代码时,我在IDLE中输入以下内容:

one_pound_coin = Pound()
one_pound_coin.colour

这给了黄金'。但是,如果我运行以下内容:

one_pound_coin.rust()

我收到一条错误消息:

Traceback (most recent call last):
    File "<pyshell#133>", line 1, in <module>
    one_pound_coin.rust()
AttributeError: 'Pound' object has no attribute 'rust'

预期的行为是完全不同的。 应该发生的是修改器运行时没有错误,然后,当您键入one_pound_coin.colour时,IDLE应返回&#34;绿色&#34;。

奇特之处在于我正在使用与导师正在使用的完全相同的代码。我用一把细齿梳子完成了它,并逐字检查每个角色,每个空间,一切。该代码适用于视频中的导师,但对我来说并不适用。任何人都知道为什么会这样吗?

0 个答案:

没有答案