测试类中字段的存在性
我有个简单的问题。我有一个二维数组,这个数组里存储的是一个类的实例。数组里的每个元素根据程序之前读取的一个文本文件被分配了特定的类。因为我不知道在某个特定的元素里存储的是哪个类,所以我可能会去访问一个在那个位置并不存在的字段(比如当一个叫做temp的实例存储在那个位置时)。我想了一个测试这个的办法,但这个方法比较繁琐,还需要一个额外的矩阵。有没有什么函数可以用来检查一个类里某个字段是否存在呢?
class temp():
name = "default"
class temp1():
appearance = "@"
3 个回答
1
你也可以使用异常处理来做到这一点。
try:
val = x.name
except AttributeError:
val = x.appearance
3
你是在寻找:
isinstance(object, classinfo)
这个函数的作用是:如果你给它的第一个参数(也就是对象)是第二个参数(也就是类信息)的一个实例,或者是这个类的子类(无论是直接的还是间接的),它就会返回真(true)。如果第二个参数是一个类型对象(新的风格类),而第一个参数是这个类型的对象或者它的子类,它也会返回真。如果第一个参数不是这个类的实例或者不是给定类型的对象,这个函数就会一直返回假(false)。如果第二个参数既不是类对象也不是类型对象,它可能是一个包含类或类型对象的元组,或者可能包含其他这样的元组(但不接受其他类型的序列)。如果第二个参数既不是类、类型,或者类和类型的元组,程序会抛出一个类型错误(TypeError)异常。
你现在想做的事情似乎不是个好主意。请更详细地描述一下你最初的需求,我们会帮你想出一个更好的设计方案。