2016-11-06 45 views
1

这是我创造了我的功能代码PYTHON - 错误而调用outter功能

#============= 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它说,我举一个参数,但我无法弄清楚我在哪里给他一个

+1

看起来你需要引用'compte_a'实例。你有没有试过将函数定义为'def calculer_date_retour(self):'? – BorrajaX

+0

@BorrajaX刚刚尝试过,它给了我一个新的错误...追溯(最近呼叫最后): 文件“Z:/ Fichier de test.py”,第25行,在 print(compte_a.calculer_date_retour()) 文件 “Z:/pret.py” 45行,在calculer_date_retour 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

您需要将self放在类方法的声明中。

def calculer_date_retour(self):

.的操作者在python介绍对象作为要调用的方法的第一个参数。

a.b()使:b(a)这就是你如何使用self访问属性。

您正在发送一个参数而没有注意到。

+1

顺便说一声:'自己的名字是约定,你可以称它为任何你想要的 –

+0

虽然这是一个非常强大的约定。 :-) 您可以将所有非私有类属性命名为以下划线开头,但每个python程序员都会认为它们是私有的。 – sobek

+0

是的。我想明确说明“自我”不是一个保留字或什么的。 :) 在Python公约一般非常强大。 –