2017-05-17 21 views
0

イム初めて原子上のpythonと協力し、自分のコードの一部のPython:floatオブジェクト呼び出すことはできません

を実行しながら、私はいくつかの問題を抱えてきたI'veは、このクラスを定義した:

class Installment(object): 

    def __init__(self, pName, pPercentage): 

     self.name = pName 
     self.percentage = pPercentage 
     self.grade = 0.0 
     self.contribution = 0.0 

    def givePercentage(self): 

     return (self.percentage) 

    def grade(self, pGrade): 

     self.grade = pGrade 

     self.contribution = giveContribution() * pGrade 

    def giveContribution(self): 

     return (self.contribution) 

しかし、私は行ってアイブの機能をテストしてみてください:

midterm1 = Installment("Parcial 1", 0.25) 

print(midterm1.givePercentage()) 

print(midterm1.giveContribution()) 

midterm1.grade(3.4) 

アトムは、次のことをスロー:

 
0.25 

0.0 

Traceback (most recent call last): 

    File "C:\Users\Oscar Ramirez\Documents\Python\Tracker\Installment.py", 
line 28, in 

    midterm1.grade(3.4) 

TypeError: 'float' object is not callable 

[Finished in 0.609s] 

答えて

1

属性self.gradeと、機能def grade(self, pGrade):があります。 midterm1.gradeを実行すると、最初のものを意味します。あなたは2番目のものにアクセスすることはできません。

このような名前の衝突の問題を回避するには、関数または属性の名前を変更します。おそらくdef set_grade_and_contribution


はまた、これはあなたの問題とは無関係ですが、一般的に何もしない「ゲッター」メソッドを作成しますが、属性を返すために慣用のPythonではありません。 print(midterm1.contribution)がちょうどよく働き、より少ないコードしか必要としないときには、print(midterm1.giveContribution())を実行することにはあまり意味がありません。

関連する問題