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