首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用owlready2动态创建类和个人?

如何使用owlready2动态创建类和个人?
EN

Stack Overflow用户
提问于 2019-02-10 19:27:17
回答 1查看 1.4K关注 0票数 1

这是通过文件:

代码语言:javascript
复制
NewClass = types.new_class("NewClassName", (SuperClass,), kwds = { "namespace" : my_ontology })

我不明白为什么代码不起作用。我写过:

代码语言:javascript
复制
NewClass = types.new_class("NewClassName", (Example,), kwds = { "namespace" : onto })

我还尝试了url:Owlready2 dynamic class generation中不起作用的代码

代码语言:javascript
复制
types.new_class("NewClassName", (onto["ParentClass"],))

我不明白这个表达式(在“ParentClass”上)。然后我不明白如何动态地创建个人。这是可能的吗?

我能有一个简单的简单的例子脚本来处理类和个人吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-01 17:29:52

  1. 我刚刚编写了这段代码并对其进行了测试:
代码语言:javascript
复制
from owlready2 import *

# check that the base class is accessible
print(Thing)  # owl.Thing

my_onto = get_ontology('http://test/qwerty')

with my_onto:
    my_new_class = types.new_class("NewClassName", (Thing,))  # make a class

print(my_new_class)  # qwerty.NewClassName

my_obj = my_new_class("myObjName")  # make an instance

print(my_obj)  # qwerty.myObjName

注意从owlready2.Thing (在我的例子中)或它的任何子类派生自定义类。

创建个体很简单,可以将序号python实例(使用保存对已创建类的引用的变量(在我的例子中是my_new_class)作为构造函数,因此调用它获得一个新实例)。调用不需要放置在with my_onto:块中。

因此,新创建的实体可以通过以下方式访问:

  • class_var = my_onto.NewClassName
  • class_var = my_onto["NewClassName"] # returns None if you pass wrong string
  • obj_var = my_onto.myObjName
  • obj_var = my_onto["myObjName"]

注意,如果实例已经存在,则不会创建实例。所以下面的代码总是返回True

代码语言:javascript
复制
my_onto["myObjName"] is my_onto["myObjName"]  # True

我是在我的Python3.7和Owlready2 v0.23最近发布的时候这样做的(据pip install -U owlready2报道)。

  1. 代码(onto["ParentClass"],)只是从本体onto中获取所需的基类,并将其打包成一个元组(请注意语法(a,)以创建一个元素元组)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54620145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档