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
它可能非常明显,我只是通过微小的调整将它与教程代码进行比较,例如。类名和属性等。
答案 0 :(得分:2)
只需进行微调即可。类名和属性等。
你需要非常小心命名。 Python不知道你的变量意味着什么或如何从另一个推断出一个名称。
你可能很明显 Attack 与 DAP 具有相同的含义 - 但这对你来说是显而易见的,而不是对其他任何人,当然也不是Python。它所看到的只是你给事物的名字。
所以我假设你想要实现的是这个(红色箭头从构造函数参数指向相应的实例变量):
右?要做到这一点,你必须与命名保持一致:
class Druid:
def __init__(self, attack, defence, speed, money, crit):
self.attack = attack
self.defence = defence
self.speed = speed
self.money = money
self.crit = crit
def Druid_stat(self):
return '{} {}'.format(self.attack, self.defence)
Human_Druid = Druid(8, 7, 3, 50, 5)
print(Human_Druid.Druid_Stat())
注意我还将构造函数中的名称__init__
方法更改为小写。虽然技术上不需要,但在Python中使用小写(如attack, defence
等),CapWords
形式的类名(例如Druid
)和所有{中的常量)来编写变量是一种惯例。 {1}}。
答案 1 :(得分:1)
这不是OOP问题。您尝试将变量DAP分配给self.attack,但您从未在第一时间设置DAP。
我想要做的是:
self.attack = Attack
创建对象时,Attack设置为8。您也必须对其他变量执行相同的操作。
答案 2 :(得分:0)
在您的构造函数(__init__
)中,您声明Druid
类'变量为attack
,defence
,speed
,{{1 }和money
。注意:它们都是小写的问题 - 你的构造函数输入(即crit
)因首字母大写而不同。
我不明白为什么Attack, Defence, Speed, Money, Crit
,DAP
和其他DDP
名称会显示,但他们不属于那里。
似乎你正试图从你正在阅读的任何地方调整一个例子,但你已经做了一个大杂烩,保留你读到的一些内容,同时改变其他部分,让你自己陷入了很多混乱。
答案 3 :(得分:0)
您收到的错误似乎来自未声明的“DAP”。 尝试在方法之前声明这些变量,并为类提供对象类型
D
您也可以在init方法中声明变量
class Druid(object):
DAP = 0
DDP = 0
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())
最后,我可能在这方面不正确,但是您将值传递给方法,而不使用它们?所以你可能正在寻找的是这样的:
class Druid(object):
def __init__(self, Attack, Defence, Speed, Money, Crit):
DAP = 0
DDP = 0
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())