2017-12-04 15 views
0

を定義されているインスタンスメソッドを呼び出す、次のよう です:はAttributeError私は私のpython 3でこれをコード化し、それが属性error.codeを示している

import datetime 

class MessageUser(): 
    User_Details = [] 
    Messages = [] 
    base_message = """Hi {name}! 
    Thank you for the purchase on {date}. 
    We hope you are exicted about using it. Just as a 
    reminder the purcase total was ${total}. 
    Have a great time! 

    from Pritom_Mazhi 
    """ 

    def add_user(self, name, amount, email=None): 
    name = name[0].upper() + name[1:].lower() #Capitalizing the first letter of all names - formatted name 
    amount = "%.2f" %(amount) #formatted amount 
    detail = { 
     "name" : name, 
     "amount" : amount, 
    } 
    today = datetime.date.today() 
    date_text = '{tday.day}/{tday.month}/{tday.year}'.format(tday=today) #formatted date 
    detail["date"] = date_text 
    if email is not None: 
     detail["email"] = email 
    self.User_Details.append(detail) 

    def get_details(self): 
     return self.User_Details 

    def make_message(self): 
     if len(self.User_Details) > 0: 
     for detail in self.get_details(): #for detail in self.User_Details 
      name = detail["name"] 
      amount = detail["amount"] 
      date = detail["date"] 
      email = detail["email"] 
      message = self.base_message 
      formatted_message = message.format(
      name = name, 
      total = amount, 
      date = date, 
      ) 
      self.Messages.append(formatted_message) 
      return self.Messages 
     else: 
      return [] 


obj = MessageUser() 
obj.add_user("Pritom", 123.32, email='[email protected]') 
obj.add_user("jon Snow", 94.23) 
obj.add_user("Sean", 93.23) 
obj.add_user("Emilee", 193.23) 
obj.add_user("Marie", 13.23) 
obj.get_details() 

obj.make_message() 

私はそれを実行したときに、私はこのエラーを取得:

File "Class_StringFormat.py", line 57, in <module> 
    obj.get_details() 
AttributeError: 'MessageUser' object has no attribute 'get_details' 

私はそこで何をしたのか分かりませんので、それを修正することはできません。

+0

あなたはあなたの質問のタイトルを修正してくださいすることができます。あなたが求めていることを示すものでなければなりません。 –

+1

Btw:インデントによってエラーが発生している可能性があります。 –

答えて

1

質問で字下げが正しく再現された場合、get_detailsadd_userの中にと定義され、外側からは見えません。

あなたはadd_userと同じレベルにあることをget_detailsmake_messageの定義をインデント解除する必要があります

def add_user(self, name, amount, email=None): 
    # method body... 

def get_details(self): 
    return self.User_Details 

def make_message(self): 
    # method body 
+0

大変ありがとうございました。私は正しくインデントを作成した後、ありがとうございます。 print(obj.make_message()) 最後の行に「pritom」のメッセージだけが表示され、 "jon snow、sean、emilee、marie"など どうすれば修正できますか? このコードは、実行後にすべてのメッセージをすべて印刷するようにコードを動作させます。 print(obj.make_message()) この行は1回だけです。 –

+0

@SamulSalehin問題は、forループ内にreturn文があるmake_messageにあります。最初の反復で戻り、残りのループは実行されません。ループが終了した後に戻る必要があります。 –

+0

それは解決されています、大変ありがとうございます –

関連する問題

 関連する問題