2016-12-25 19 views
-1

大きなコードの一部としてConversationというクラスを作成していて、ユーザーが入力したフィールドが有効であることを確認したいのです(有効でない場合は、私は、プログラムを実行すると、エラー)が、私のIS_VALID方法が機能していません。クラス内でメソッドを検証する

クラスの会話:

def __init__(self, members, size_limit, backup_policy, cloud_account_prefix='./'): 
    if not self.is_valid(): 
     raise ValueError 
    self.members = members 
    self.size_limit = size_limit 
    self.backup_policy = backup_policy 
    self.cloud_account_prefix = cloud_account_prefix 
    self.backup_count = 0 
    self.size_count = 0 
    self.messages = [] 

def is_valid(self, members, size_limit, backup_policy, cloud_account_prefix): 
    if self.members < 2: 
     return False 
    if self.size_limit <= 10: 
     return False 
    if not path_ok(self.cloud_account_prefix): 
     return False 
    if self.backup_policy < 1: 
     return False 
    else: 
     return True 

私が間違って何をしているのですか?

+3

エラーはありますか?あなたはどこかでそれを呼んでいますか? – Miguel

+0

「自己」を削除します。あなたのis_valid関数で。この時点ではまだ定義されていません。代わりに引数を直接使用してください。例:「メンバーが<2:」の場合 –

+0

プロパティを使用して割り当て時に属性を検証しないのはなぜですか?また、より良いフィードバックを与える必要があります。なぜバリデーションに実際に*どの値と理由があるのか​​を示すエラーを投げないのですか? "ValueErrorがありました"とは何も教えてくれませんが、たとえば"あなたは少なくとも2つのメンバーを指定する必要があります"有用な情報です。 – jonrsharpe

答えて

2
  1. 任意の初期化は、その中self.somethingへの呼び出しがAttribueErrorとなりますので行われる前に、あなたはis_validを呼んでいます。

  2. is_validは4つの引数を期待し、まだあなたはあなたのコードは、彼らを確認するために__init__からis_validにすべての引数を渡すことができ

    class Conversation: 
        def __init__(self, members, size_limit, backup_policy, cloud_account_prefix='./'): 
    
         self.members = members 
         self.size_limit = size_limit 
         self.backup_policy = backup_policy 
         self.cloud_account_prefix = cloud_account_prefix 
         self.backup_count = 0 
         self.size_count = 0 
         self.messages = [] 
         if not self.is_valid(): 
          raise ValueError 
    
        def is_valid(self): 
         if self.members < 2: 
          return False 
         if self.size_limit <= 10: 
          return False 
         if not path_ok(self.cloud_account_prefix): 
          return False 
         if self.backup_policy < 1: 
          return False 
         else: 
          return True 
    

    別のアプローチをする必要があります0

でそれを呼び出しますインスタンス属性を初期化する前に有効です。

class Conversation: 
    def __init__(self, members, size_limit, backup_policy, cloud_account_prefix='./'): 
     if not self.is_valid(members, size_limit, backup_policy, cloud_account_prefix): 
      raise ValueError 
     self.members = members 
     self.size_limit = size_limit 
     self.backup_policy = backup_policy 
     self.cloud_account_prefix = cloud_account_prefix 
     self.backup_count = 0 
     self.size_count = 0 
     self.messages = [] 

    def is_valid(self, members, size_limit, backup_policy, cloud_account_prefix): 
     if members < 2: 
      return False 
     if size_limit <= 10: 
      return False 
     if not path_ok(cloud_account_prefix): 
      return False 
     if backup_policy < 1: 
      return False 
     else: 
      return True 
関連する問題