14

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

class temp():
   name = "default"

class temp1():
   appearance = "@"
4

3 回答 3

38

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

于 2010-04-20T05:41:39.263 回答
3

您是否在寻找:

isinstance(对象,类信息)

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

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

于 2010-04-20T05:39:19.660 回答
1

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

try:
    val = x.name
except AttributeError:
    val = x.appearance
于 2010-04-20T05:44:30.160 回答