2016-11-06 3 views
1

outter関数を呼び出しながら、これは私がPYTHON - エラー

#============= Importations ===================== 
from datetime import date 

#============= Classe =========================== 
class Pret : 

    #----------- Constructeur ----------------------------- 

    def __init__(self,p_date:str,p_duree_max:int,p_nbr_renouv): 
     #.... Déclaration des données membres .... 
     self.__date_debut = None # date 
     self.__duree_max = 0 # int 
     self.__nbr_renouv = 0 # int 
     #.... Code .... 
     self.__date_debut = p_date 
     self.__duree_max = p_duree_max 
     self.__nbr_renouv = p_nbr_renouv 

    #----------- Autres méthodes ------------------------- 
    def calculer_date_retour(): 
     debut=self.__date_debut 
     debut_a_auj= debut.toordinal() 
     date_retour=fromordinal(debut_a_auj+self.__duree_max) 
     return date_retour 

「calculer_date_retour」機能は私にこのから与えられています「date_debut」と「duree_max」から日付を与える必要があり、私の機能を作成したコードですプログラム:

#----------- Importations et fonctions ---------------- 
from datetime import date 
from pret import Pret 
#----------- Déclaration des variables ---------------- 
debut = None 
dates = None 
duree = 0 
nbr_renouv = 0 
compte_a = None 
x=0 
#----------- Code ----------- 
debut=date(2000,1,10) 
print(debut) 
dates = date.today() 
duree = 10 
nbr_renouv = 2 


compte_a=Pret(dates, duree, nbr_renouv) 
print(compte_a.calculer_date_retour()) 

が、私はprint(compte_a.calculer_date_retour)をしようとすると、それはこのように私にエラーを与える:

Traceback (most recent call last): 
    File "Z:Fichier de test.py", line 25, in <module> 
    print(compte_a.calculer_date_retour()) 
TypeError: calculer_date_retour() takes 0 positional arguments but 1 was given 

は、それは私がそれに引数を与えると言うbasiclyが、私はここで、iは彼に与えている見つけ出すカント1

+1

'compte_a'インスタンスへの参照が必要なようです。関数を 'def calculer_date_retour(self):'として定義しようとしましたか? – BorrajaX

+0

@BorrajaXはちょうど試しましたが、私に新しいエラーがあります...トレースバック(最新の最後の呼び出し): ファイル "Z:/ Fichier de test.py"、行25、 print(compte_a.calculer_date_retour()) ファイル:calculer_date_retourで "Z /pret.py"、45行、 date_retour = fromordinal(debut_a_auj +自己.__ duree_max) NameError:グローバル名 'fromordinal'() 'あなたがいるので、あなたの' calculer_date_retour中です –

+1

に定義されていません。あなたのコードに定義されていない 'fromordinal'関数を呼び出す(これにはインポートが含まれます)' date.fromordinal(debut_a_auj + self .__ duree_max) '... – BorrajaX

答えて

0

classから関数を呼び出す場合、selfは常に、デフォルトの引数として与えられ、これはあなたのようにselfを必要があることを意味していますパラメータを定義するとき

def calculer_date_retour(self): 
    debut=self.__date_debut 
    debut_a_auj= debut.toordinal() 
    date_retour=date.fromordinal(debut_a_auj+self.__duree_max) 
    return date_retour 
+1

ありがとうの男は私が必要としたexaclyありがとうございます –

0

クラスメソッドの宣言に自己を入れる必要があります。 Pythonで

def calculer_date_retour(self):

.オペレータは、あなたが呼び出しているメソッドの最初の引数としてオブジェクトを紹介します。

a.b()は、b(a)となります。これは、selfを使用してプロパティにアクセスする方法です。

通知なしで1つの引数を送信しています。

+1

BTW: '自己名はコンベンションでは、あなたが望むところでもそれを呼び出すことができます –

+0

それはかなり強いコンベンションです。 :-) あなたの名前以外のすべてのクラス属性に下線で始まる名前を付けることもできますが、すべてのPythonプログラマーはそれらが非公開であると考えるでしょう。 – sobek

+0

はい、そうです。私は、「自己」は予約語ではないことを明確にしたかった。 :) 一般的に、Pythonの規約は非常に強力です。 –