0

授業のコツをつかみ始めたばかりなので、簡単な人口動態プログラムを作成して練習しようと思いました。super() の実装方法がよくわかりません。古い投稿やその他のオンライン フォーラムの内容を読んでいましたが、何も機能しません。誰かが私に理由を説明できますか?

class Females(object):
    '''Female population settings. Defines the pregnancy rates, death rates,
     and live births for a year.'''

    def __init__(self,female):
        super(Females,self).__init__()
        self.female = female
        self.live_birth

    def __str__(self):
        return 'Current female population: {0}'.format(str(self.female))

    def death(self):
        self.female_death_oldage=int((randint(0,50)*0.01)*female)
        return self.female_death_oldage

    def pregnancies(self):
        self.female_pregnancies=int(((randint(0,100)*0.01)*female)*0.2)
        return self.female_pregnancies

    def live_birth(self):
        self.live_births=int(self.female_pregnancies*((randint(0,100)*0.01)))             
        return self.live_births

    def total_females(self):
        self.next_female_generation = female - self.female_death_oldage


class Babies(Females):

    def __init__(self):
        super(Babies,self).__init__()

    def babies_born(self):
        self.little_girls = int(self.live_births*(randint(0,100)*0.01))
        self.little_boys = (self.live_births - self.little_girls)    
        return self.little_boys,self.little_girls

if __name__=='__main__':
    x=Males(male)
    y=Females(female)
    b=Babies()
    print '%r males died from old age' % x.death()
    print '%r females became pregnant' % y.pregnancies()    
    print 'There were %r live births'  % y.live_births()
    print b.babies_born()

(Eclipse Junoを使用して)実行しようとすると、次のようになります。

  File "/Users/me/Documents/Coding/Population/Population.py", line 78, in <module>
    b=Babies()
  File "/Users/me/Documents/Coding/Population/Population.py", line 56, in __init__
    super(Babies,self).__init__()
TypeError: __init__() takes exactly 2 arguments (1 given)
4

2 に答える 2

1

superクラスの基本クラスを呼び出すために使用されます。

Babies基本クラスは ですFemalesFemalesクラス コンストラクターは 2 つの引数を想定しているため、2 つの引数を渡す必要があります。

super(Babies, self).__init__('Mary')

これは次と同等です。

Females.__init__(self, 'Mary')

ただし、スーパークラスの名前を明示的に言及する必要がないため、スーパーが優先されます。

于 2013-08-23T05:59:40.200 に答える
1

Babies のスーパークラスは Female であり、その init は self と female の 2 つのパラメータを想定しています。

super(Babies,self).__init__()self2 番目の引数が欠落している暗黙のパラメーターを 1 つだけ指定して呼び出します。

于 2013-08-23T05:59:42.863 に答える