2016-09-10 28 views
-6
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()) 

はその後、私はそれはおそらく、本当に明白だと私はちょうど微調整などでのチュートリアルのコードと比較することしてきたPythonクラスのコンストラクタでパラメータを受け入れる方法は?

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

DAPとは何ですか?またはDDP?または自己.DAP /自己.DP?コード内にはありません – Li357

+0

その時点でself.attack = DAP –

+1

あなたは "self.attack'を' DAP'に設定していますが、 'DAP'の意味は分かりません。 'DAP'はどうなるのでしょうか? – khelwood

答えて

2

just with minor adjustments eg. class names and attributes etc.

あなたが命名してスーパーに注意する必要があります。だから、あなたが探していることができるものを、このようなものです。 Pythonは、変数の意味や、ある名前を他の名前から推測する方法を知らない。

攻撃DAPと同じ意味を持っていることそれはあなたには明らかであり - それは、Pythonには、確かではないではない、誰に、あなたにだけは明らかだと。それはあなたが物事に与える名前です。

だから私は、あなたが達成したいことは、この(それぞれのインスタンス変数にコンストラクタ引数から指している赤の矢印)であると仮定します。

enter image description here

右?命名に一貫性の維持する必要があり、これを行うには:

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で規則は全てUPPERCASEに小文字(attack, defence等のように)、CapWords形態のクラス名(たとえば、Druid)と定数の変数を記述することです。

+0

おかげでそんなに8? –

+0

今私のために多くのthats片付け考え始めています実際には、[codeacademy](https://www.codecademy.com/learn/python)など、適切な構造のコースから恩恵を受ける可能性があります。多くの製品がありますが、私はどのような方法でも提携していません。 [別のもの](http://www.learnpython .org /)は少しフォーマル化されています。あなたがそのようなことをしているならば、もちろん本を拾うことができます。 _learning python book_ – miraculixx

1

これはOOPの問題ではありません。変数DAPをself.attackに割り当てようとしますが、最初にDAPを決して設定しません。私はあなたがやろうとしているasume何

は次のとおりです。オブジェクトを作成するとき

self.attack = Attack 

攻撃は8に設定されています。他の変数についても同じことを行う必要があります。あなたのコンストラクタで

0

__init__)、あなたはあなたのDruidクラスの変数はattackdefencespeedmoneycritであることを述べています。注:これらはすべて小文字の問題です。コンストラクタの入力(つまり、Attack, Defence, Speed, Money, Crit)は、最初の文字が大文字であるために異なります。

なぜDAPDDPと他のDという名前が表示されているのかわかりませんが、それらは所属していません。

あなたが読んでいるところから一例を適用しようとしているようですが、あなたは他の部分を変更している間に読んだことのいくつかを保持していて、かなり混乱してしまいました。

0

あなたが受け取っているエラーは、「DAP」が宣言されていないことから来ているようです。 、メソッドの前にこれらの変数を宣言すると、クラスにオブジェクト型

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()) 

ます。また、initメソッドの内部で変数を宣言することができますを与える

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()) 

を試してみてくださいそして最後に、私は上の誤りがある可能性がありこれは使用されていなくてもメソッドに値を渡していますか?

class Druid(object): 

     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.DAP, self.DDP) 

    Human_Druid = Druid(8, 7, 3, 50, 5) 

    print(Human_Druid.Druid_Stat()) 
関連する問題