如何递归地比较python中两个对象的数据类型?

时间:2017-06-12 15:09:43

标签: python

我正在尝试对类属性进行验证,以便它只能接受特定值或特定type值。我想出了以下方法

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”
  • []

1 个答案:

答案 0 :(得分: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
你想要完成什么?这本质上是凌乱的