次のように私は(継承を練習)私のPythonプロジェクトのために、次のファイル/フォルダの設定を持っている:Pythonで継承を実践する:クラスと属性が正しく設定されているにもかかわらず、なぜAttributeErrorですか?
my_project/new_classes.py
my_project/human/Human.py
my_project/human/__init__.py (note, this is a blank file)
それは私のclass Samurai(Human)
が正しくセットアップされているように見えますが、私は次のエラーを受信しています:
from human.Human import Human
class Wizard(Human):
def __init__(self):
super(Wizard, self).__init__()
self.intelligence = 10
def heal(self):
self.health += 10
class Ninja(Human):
def __init__(self):
super(Ninja, self).__init__()
self.stealth = 10
def steal(self):
self.stealth += 5
class Samurai(Human):
def __init__(self):
super(Samurai, self).__init__()
self.strength = 10
def sacrifice(self):
self.health -= 5
# create new instance of Wizard, Ninja, and Samurai
harry = Wizard()
rain = Ninja()
tom = Samurai()
print harry.health
print rain.health
print tom.health
harry.heal()
print harry.health
rain.steal()
print rain.stealth
tom.sacrifice()
print tom.health
print tom.stealth
コードブレーク:ここ
line 41, in <module>
tom.sacrifice()
AttributeError: 'Samurai' object has no attribute 'sacrifice'
は私のmy_project/new_classes.py
ファイルからのコードですそれはラインtom.sacrifice()
になる - 任意のアイデアなぜですか?私が持っていた
もう一つの問題は、親クラスをインポートしようと、私は式がmodule_directory import ModuleFileName
からだと思ったとして、私は(私は仕事だろうと思った声明from human import Human
を、使用していたが、次のようにエラーを受け取ったとき、最初にありました:。?TypeError: Error when calling the metaclass bases module.__init__() takes at most 2 arguments (3 given)
私は正しくクラスをインポートについて混同されることが、にfrom human.Human import Human
を私のimport文を変更し、他はなかったが、これは働いていた理由を思っていたことで、これを解決し、誰も明確に助けることができるかもしれない期待していた
[編集]削除されたコメント
'Human'の定義は何ですか?それは新しいスタイルのクラスですか? – DeepSpace
[MCVE]にトリムすることはできませんか? –
'human'クラスを提供できるので、実行できますか? – noumenal