如何在Owlready2中使用.instances()方法遍历owl:Thing的所有实例?
如何在Owlready2中遍历本体的所有实例(owl:Thing的实例)
我懂你现在的困扰——能顺利遍历Drug这类具体类的实例,但想获取owl:Thing的所有实例时,试了好几种写法都跑不通。别着急,我来帮你解决这个问题:
正确的解决方案
在Owlready2里,要获取本体中所有实例(也就是owl:Thing的所有实例),最直接省心的方法是用本体对象的individuals()方法:
for i in onto.individuals(): print(i)
如果你一定要通过owl:Thing类来获取,得确保引用的是OWL标准本体里的Thing,而不是你自己本体里不存在的同名类。先导入owl模块,再调用它的instances()方法就行:
from owlready2 import owl for i in owl.Thing.instances(): print(i)
为什么你之前的写法不生效?
我们挨个拆解你尝试的代码问题:
Thing.instances():这里的Thing没有明确指向OWL标准的owl:Thing,如果代码里没正确导入或定义这个类,Python肯定找不到它,自然报错。onto.Thing.instances():你的本体onto里并没有定义Thing类(owl:Thing是OWL标准本体的顶级类,不属于你自己的本体),所以onto.Thing会返回None或者抛出属性不存在的错误。Thing.subclasses.instances():这是语法错误,subclasses是类的方法,得写成Thing.subclasses();而且就算遍历所有子类的实例,这种嵌套循环的写法也远不如individuals()简便。
按照上面的正确写法试试,应该就能顺利获取所有实例了!
内容的提问来源于stack exchange,提问作者mario7111
相关产品推荐
相关产品推荐

