测试类中是否存在字段

时间:2010-04-20 05:37:10

标签: python class exists

我有一个简单的问题。我有一个存储类实例的2D数组。基于先前在程序中读取的文本文件,为数组的元素分配特定的类。由于我不知道没有在文件中查找哪个类存储在特定元素中,我可以引用该索引中不存在的字段(指的是当temp的实例存储在该索引中时的外观)。我已经想出了一种测试方法,但它很长,需要第二个矩阵。是否有一个函数来测试类中字段的存在?

class temp():
   name = "default"

class temp1():
   appearance = "@"

3 个答案:

答案 0 :(得分:32)

hasattr(x, 'foo')是一个内置的二进制函数,用于检查对象x是否具有属性x.foo(无论是否从类中获取),这似乎与您的内容相近问。你问的问题实际上是你应该提出的问题 - 是一个不同的问题 - 正如@Eli的回答所暗示的那样,你的设计似乎很奇怪。但是,这确实按照要求回答了您的问题; - )。

答案 1 :(得分:3)

您在寻找:

  

isinstance(object,classinfo)

     

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

无论你想做什么都不是一个好主意。请更详细地描述您的原始需求,我们将帮助您提出更好的设计。

答案 2 :(得分:2)

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

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