免责声明:这是我第一次涉足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;。
奇特之处在于我正在使用与导师正在使用的完全相同的代码。我用一把细齿梳子完成了它,并逐字检查每个角色,每个空间,一切。该代码适用于视频中的导师,但对我来说并不适用。任何人都知道为什么会这样吗?