2016-12-25 63 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函数中。目前还没有定义。直接使用参数。例如:“if members <2:” –

+0

为什么你不使用属性验证你的属性?你也应该给予更好的反馈;为什么不让验证抛出实际上说的错误*哪个值和为什么*? “有一个ValueError”没有告诉我什么,但例如“你必须指定至少两个成员”是有用的信息。 – jonrsharpe

回答

2
  1. 要调用is_valid任何初始化任何调用之前完成这么self.something内将与AttribueError结果。

  2. is_valid预计4个参数但是你把它以0

你的代码应该是

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 

另一种方法可能是将所有参数传递从__init__is_valid,以验证他们在打扰初始化实例属性之前有效:

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