class Druid:
def __init__(self, Attack, Defence, Speed, Money, Crit):
self.attack = DAP
self.defence = DDP
self.speed = DSpeed
self.money = DMoney
self.crit = DCC
def Druid_stat(self):
return '{} {}'.format(self.DAP, self.DDP)
Human_Druid = Druid(8, 7, 3, 50, 5)
print(Human_Druid.Druid_Stat())
然后我得到了
Traceback (most recent call last):
File "/Users/ianbrown/Desktop/Shannara_Cronicles_ALPHA.py", line 13, in <module>
Human_Druid = Druid(8, 7, 3, 50, 5)
File "/Users/ianbrown/Desktop/Shannara_Cronicles_ALPHA.py", line 5, in __init__
self.attack = DAP
NameError: global name 'DAP' is not defined
这可能真的很明显,我一直比较它与教程代码只是轻微的调整,如类名和属性等
在您的构造函数(
__init__
)中,您声明您的Druid
类的变量是attack
、defence
、speed
、money
和crit
。注意:它们都是小写的——构造函数输入(即,Attack, Defence, Speed, Money, Crit
)是不同的,因为首字母是大写的。你知道吗我不明白为什么会出现
DAP
、DDP
和其他D
的名字,但它们不属于那里。你知道吗似乎你正在尝试从你正在阅读的任何地方改编一个例子,但是你做了一个大杂烩,保留了你所读的一些东西,同时改变了其他部分,让自己陷入了一个很大的混乱。你知道吗
你需要非常小心地命名。Python不知道变量的含义,也不知道如何从一个名称推断另一个名称。你知道吗
对您来说,攻击与DAP具有相同的含义,但这对您来说是显而易见的,对其他人来说不是,当然对Python来说也不是。它看到的只是你给事物起的名字。你知道吗
所以我假设您想要实现的是(从构造函数参数指向相应实例变量的红色箭头):
是吗?为此,您必须与命名保持一致:
注意,我还将构造函数中的名称
__init__
方法更改为小写。虽然在技术上不是必需的,但在Python中,用小写形式(如attack, defence
等)编写变量、用CapWords
形式编写类名(如Druid
)以及用所有UPPERCASE
形式编写常量是一种惯例。你知道吗这不是一个面向对象的问题。您尝试将变量DAP赋给自我攻击但你一开始就没有设定DAP。你知道吗
我想你要做的是:
创建对象时,攻击设置为8。对其他变量也必须这样做。你知道吗
相关问题 更多 >
编程相关推荐