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

2024-04-19 23:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

免责声明:这是我第一次尝试OOP,如果我对问题的解释不太清楚,我深表歉意。我已经尽力了,但是这个术语对我来说还是新的

你好。我正在学习一个关于面向对象编程的初级Python教程。本教程主要介绍父类和子类,以及子类如何从父类继承属性

为了解释这个原理,导师讨论了如何利用一个父类和几个不同的子类之间的关系来创造不同类型的硬币。父类称为“Coin”。这个儿童班叫Pound(我来自英国,所以我们用的是英国硬币)

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.colourIDLE时,应该返回“greenish”

奇怪的是,我使用的代码与导师使用的代码完全相同。我用细齿梳子仔细检查了每一个字符,每一个空格,每一件事。视频中的代码对导师有效,但对我无效。有人知道为什么吗


Tags: selfcleanisvaluedefrustonecoin