この質問が何度か聞かれたことは知っていますが、私の問題の解決策を提供してくれた人は誰もいません。私はこれらを読みました:
__ init __()は正確に2つの引数を取ります(1つ与えられます)?
class __init __()は正確に2つの引数を取ります(1つ与えられます)
私がやろうとしているのは、非常にくだらないバージョンのMinecraftのように、「サバイバルゲーム」用に2つのクラスを作成することだけです。以下は、2つのクラスの完全なコードです。
class Player:
'''
Actions directly relating to the player/character.
'''
def __init__(self, name):
self.name = name
self.health = 10
self.shelter = False
def eat(self, food):
self.food = Food
if (food == 'Apple'):
Food().Apple()
Elif (food == 'pork'):
Food().pork()
Elif (food == 'beef'):
Food().beef()
Elif (food == 'stew'):
Food().stew()
class Food:
'''
Available foods and their properties.
'''
player = Player()
def __init__(self):
useless = 1
Amount.Apple = 0
Amount.pork = 0
Amount.beef = 0
Amount.stew = 0
class Amount:
def Apple(self):
player.health += 10
def pork(self):
player.health += 20
def beef(self):
player.health += 30
def stew(self):
player.health += 25
そして今、完全なエラーのために:
Traceback (most recent call last):
File "/home/promitheas/Desktop/programming/python/pygame/Survive/survive_classe s.py", line 26, in <module>
class Food:
File "/home/promitheas/Desktop/programming/python/pygame/Survive/survive_classe s.py", line 30, in Food
player = Player()
TypeError: __init__() takes exactly 2 arguments (1 given)
クラスを機能させたいだけです。
使用したコードは次のとおりです。
player = Player()
これは__init__
は、コードに応じてname
という1つのパラメーターで指定する必要があります。したがって、問題を解決するには、Playerコンストラクターに名前を指定するだけで、次のように設定できます。
player = Player('sdfasf')
問題は、クラスPlayer
's __init__
関数は、Classインスタンスを初期化している間、name
引数を受け入れます。最初の引数self
は、クラスインスタンスを作成するときに自動的に処理されます。だからあなたは変更する必要があります
player = Player()
に
player = Player('somename')
プログラムを起動して実行します。
__init__()
は、クラスがインスタンス化されたときに呼び出される関数です。したがって、インスタンスを作成するときに、__init__
に必要な引数を渡す必要があります。だから、代わりに
player = Player()
使用する
player = Player("George")
最初の引数は暗黙のself
であり、インスタンス化するときに含める必要はありません。ただし、name
は必須です。含まれていなかったため、エラーが発生していました。
あなたのコードは、あなたが___init__
_に入力しないものを入力することを期待していることを知っています。
エラー__init__() takes exactly 2 arguments (1 given)
がどこから来ているのかを理解できる簡単な例を以下に示しました。
私がしたことは、useless
に入力を与える定義を作成したことです。
そして私はその定義を___init__
_から呼んでいます。
コード例:
_class HelloWorld():
def __init__(self):
self.useThis(1)
def useThis(self, useless):
self.useless = useless
print(useless)
# Run class
HelloWorld()
_
def exampleOne(self)
のような定義がある場合、入力は必要ありません。それ自体がtに見えます。
しかし、def exampleTwo(self, hello, world)
は2つの入力を期待しています。
したがって、これら2つを呼び出すには、次のものが必要です。
_self.exampleOne()
self.exampleTwo('input1', 'input2')
_