2016-12-12 4 views
0

私はPythonには新しく、クラスとオブジェクトを持つプログラムを作成しようとしています。以下は私のコードです:TypeError:object()はパラメータをとりません - python

class Animal: 
    __name = "" 
    __height = 0 
    __weight = 0 
    __sound = 0 

# define a constructor and pass arguments 
def __init__(self, name, height, weight, sound): 
    self.__name = name 
    self.__height = height 
    self.__weight = weight 
    self.__sound = sound 


# set and get functions for name 
def set_name(self, name): 
    self.__name = name 

def get_name(self): 
    return self.__name 


# set and get functions for height 
def set_height(self, height): 
    self.__height = height 

def get_height(self): 
    return str(self.__height) 


# set and get functions for weight 
def set_weight(self, weight): 
    self.__weight = weight 


def get_weight(self): 
    return str(self.__weight) 


# set and get functions for sound 
def set_sound(self, sound): 
    self.__sound = sound 

def get_sound(self): 
    return self.__sound 


def get_type(self): 
    print("Animal") 


def toString(self): 
    return "{} is {} cm tall and {} kg and say {}".format(self.__name, self.__height, self.__weight, self.__sound) 


# create an object call cat of type Animal 
cat = Animal('Whiskers', 33, 10, 'Meow') 
print(cat.toString()) 

プログラムを実行すると、オブジェクトにパラメータがないというエラーが表示されます。クラスのコンストラクタにパラメータを記述しました。助けてください。

+7

ここに投稿した方法でコードをインデントしましたか?もしそうなら、あなたの問題です。 – dsh

+1

...もしそうなら、 '__init __()'はメソッドではありませんが、単純な関数と 'Animal'はオブジェクトから' __init __() 'を継承します。 – dhke

+0

小さいものから始めましょう。あなたのエラーのコンストラクタ以上の理由はありません。それに加えて、PythonはJavaではありません。 Javaで 'toString'をオーバーライドすることは、Pythonで' __str__'を実装するのと同じです –

答えて

4

Animalのすべての機能が正しくインデントされていることを確認してください。それらはクラスの内部にある必要があります。Animal

3

他の方法で述べたように、__init__メソッドは、それがコンストラクタとみなされるためには、クラスAnimalの内側でインデントされる必要があります。

ただし、この操作を行った後は注意してください。 __name__height__weight、および__soundは現在宣言されている静的なクラス変数です。しかし、__init__(変数の前に接頭辞self.が付いています)では、名前変数名でインスタンス変数を再宣言します。

関連する問題