2017-06-12 49 views
0

我试图对类属性进行验证,以便它只能获取特定值或具体的值type。我想出了以下方法如何递归比较python中两个对象的数据类型?

class someClass: 

    value_types = [float, [int], "A", "B"] 

    def __init__(self, value): 
     for value_type in self.value_types: 
      if not self.match_type(value_type, value): 
       raise ValueError("The value type is invalid") 
     self.value = value 

    @staticmethod 
    def match_type(obj1, obj2): 
     """ 
     For obj1 and obj2 recursively compares all the types of containers and 
     elements inside containers, return False in case of mismatch. 
     """ 
     pass 

我试图找到实现通用match_type功能,将任何一种value_type类属性的工作方式。我的主要动机是限制实例属性value的域,并验证基于value_type类属性传递的值。

只是为了更清楚起见,允许在上述someClass构造中的值将是

  • 7.5
  • [1,9,8,6]
  • “A”
  • “B”针对错误应提高

值是

  • [1.2,2.3]
  • “C”
  • []
+0

这对你的问题的目的没有关系,但是你的'__init__'函数有一堆bug。 –

+0

谢谢你让我知道,修正了错误。 – Satwik

回答

0

您可以通过但做

x = 5 
type(x) is int 
# True 

检查的类型,因为你有一个类型的怪异组合和字符串,您可能需要更复杂的检查

x = [6, 3] 
type(x) is list and type(x[0]) is int 
# True 

x = 'A' 
x == 'A' or x == 'B' 
# True 

你想完成什么?这本质上是凌乱的

+0

我试图限制一个类属性的域。 – Satwik

+0

我觉得我很难判断没有上下文,但无论如何,我上面提供的3个陈述应该足以满足您的需要 –

+0

实际上我需要一些可以适用于所有不同类型的'value_types'的泛型 – Satwik