2010-04-20 73 views
9

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

class temp(): 
    name = "default" 

class temp1(): 
    appearance = "@" 

回答

3

你是否在寻找:

isinstance(对象,CLASSINFO)

返回 真如果对象参数是CLASSINFO参数的 实例,或者一个 (直接或间接)子类 。如果classinfo 是一个类型对象(新样式类)并且 对象是该类型的对象或 a(直接或间接)子类 也返回true。如果对象不是类 实例或给定的 类型的对象,则函数始终返回 false。如果classinfo既不是类 对象也不是类型对象,它可能是 类或对象类型的元组,或可能 递归地包含其他这样的元组 (其他序列类型不接受 )。如果classinfo不是 的类,类型或元组的类型, 类型和这些元组,则会引发TypeError 异常。

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

25

hasattr(x, 'foo')是一个内置的二进制函数,用于检查对象x是否具有属性x.foo(它是否从它的类中获取),这看起来接近你所要求的。不管你问的是应该是所要求的是一个不同的问题 - 正如@Eli的回答所暗示的,你的设计看起来很奇怪。但是,这可以解答你的问题;-)。

2

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

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