0

クラスの継承を理解するのに問題があり、なぜこのPythonコードが機能しないのか疑問に思っていますが、ここで何が問題になっているのかを誰かに教えてもらえますか?

## Animal is-a object 
class Animal(object):
    def __init__(self, name, sound):
        self.implimented = False
        self.name = name
        self.sound = sound

    def speak(self):
        if self.implimented == True:
            print "Sound: ", self.sound

    def animal_name(self):
        if self.implimented == True:
            print "Name: ", self.name



## Dog is-a Animal
class Dog(Animal):

    def __init__(self):
        self.implimented = True
        name = "Dog"
        sound = "Woof"

mark = Dog(Animal)

mark.animal_name()
mark.speak()

これは端末からの出力です

Traceback (most recent call last):
  File "/private/var/folders/nd/4r8kqczj19j1yk8n59f1pmp80000gn/T/Cleanup At Startup/ex41-376235301.968.py", line 26, in <module>
    mark = Dog(Animal)
TypeError: __init__() takes exactly 1 argument (2 given)
logout

私は動物に動物が実装されているかどうかを確認させようとしていました。実装されている場合は、動物から継承するクラスを取得して、Animalsが操作できる変数を設定しました。

4

3 に答える 3

6

katrielalexはあなたの質問にかなりよく答えましたが、あなたのクラスは、間違っていないとしても、コーディングがやや不十分であることも指摘したいと思います。クラスの使い方については誤解が少ないようです。

まず、Pythonのドキュメントを読んで、基本的な考え方を理解することをお勧めします:http: //docs.python.org/2/tutorial/classes.html

クラスを作成するには、次のようにします。

class Animal:
    def __init__(self, name, sound): # class constructor
        self.name = name
        self.sound = sound

a1 = Animal("Leo The Lion", "Rawr")そして今、あなたはかそこらを呼び出すことによって名前オブジェクトを作成することができます。

クラスを継承するには、次のようにします。

# Define superclass (Animal) already in the class definition
class Dog(Animal):

    # Subclasses can take additional parameters, such as age
    def __init__(self, age):

        # Use super class' (Animal's) __init__ method to initialize name and sound
        # You don't define them separately in the Dog section
        super(Dog, self).__init__("Dog", "Woof")

        # Normally define attributes that don't belong to super class
        self.age = age

そして今、あなたは言うことによって簡単なDogオブジェクトを作成することができます、そしてあなたd1 = Dog(18)は使う必要はありませんd1 = Dog(Animal)、あなたはすでにそれがスーパークラスであることをクラスAnimalに最初の行にあると言いましたclass Dog(Animal):

于 2012-12-03T14:06:11.613 に答える
5
  1. クラスのインスタンスを作成するには、

    mark = Dog()
    

    ではありませんmark = Dog(Animal)

  2. このようなことはしないでくださいimplimented。インスタンス化できないクラスが必要な場合(つまり、最初にサブクラス化する必要がある場合)、

    import abc
    class Animal(object):
        __metaclass__ = abc.ABCMeta
    
        def speak(self):
            ...
    
于 2012-12-03T13:55:39.297 に答える
1

与えられた例の年齢は親(または基本)クラスの一部ではないため、継承したクラス(派生クラスとも呼ばれます)に関数(クラスではメソッドと呼ばれます)を実装する必要があります。

class Dog(Animal):

    # Subclasses can take additional parameters, such as age
    def __init__(self, age):
        ... # Implementation can be found in reaction before this one

    def give_age( self ):
        print self.age
于 2012-12-03T14:21:28.413 に答える