【问题标题】:Testing for the existence of a field in a class测试类中是否存在字段
【发布时间】:2011-02-09 23:54:53
【问题描述】:

我有一个简单的问题。我有一个存储类实例的二维数组。数组的元素根据程序前面读取的文本文件被分配一个特定的类。由于不查看文件我不知道在特定元素中存储了哪些类,因此我可以引用该索引中不存在的字段(指的是 temp 实例存储在该索引中时的外观)。我想出了一种测试方法,但它很冗长,需要第二个矩阵。是否有一个函数可以测试类中是否存在字段?

class temp():
   name = "default"

class temp1():
   appearance = "@"

【问题讨论】:

    标签: python class exists


    【解决方案1】:

    hasattr(x, 'foo') 是一个内置的二进制函数,用于检查对象 x 是否具有属性 x.foo(无论它是否从其类中获取),这似乎与您的要求很接近。你所问的是否真的是你应该问的是另一个问题——正如@Elianswer所暗示的那样,你的设计看起来很奇怪。但是,这确实回答了您的问题。

    【讨论】:

      【解决方案2】:

      您也可以使用异常处理来执行此操作。

      try:
          val = x.name
      except AttributeError:
          val = x.appearance
      

      【讨论】:

        【解决方案3】:

        您在寻找:

        isinstance(object, classinfo)

        返回 如果对象参数是一个 classinfo 参数的实例,或 (直接或间接)子类的 其中。如果 classinfo 也返回 true 是一个类型对象(新式类)和 object 是该类型的对象或 一个(直接或间接)子类 其中。如果对象不是一个类 给定的实例或对象 类型,函数总是返回 错误的。如果 classinfo 既不是类 对象也不是类型对象,它可能是一个 类或类型对象的元组,或者可能 递归地包含其他这样的元组 (其他序列类型不 公认)。如果 classinfo 不是 类、类型或类的元组, 类型,以及这样的元组,一个 TypeError 引发异常。

        无论您尝试做什么似乎都不是一个好主意。请更详细地描述您最初的需求,我们将帮助您提出更好的设计。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-05
          相关资源
          最近更新 更多