这是通过文件:
NewClass = types.new_class("NewClassName", (SuperClass,), kwds = { "namespace" : my_ontology })我不明白为什么代码不起作用。我写过:
NewClass = types.new_class("NewClassName", (Example,), kwds = { "namespace" : onto })我还尝试了url:Owlready2 dynamic class generation中不起作用的代码
types.new_class("NewClassName", (onto["ParentClass"],))我不明白这个表达式(在“ParentClass”上)。然后我不明白如何动态地创建个人。这是可能的吗?
我能有一个简单的简单的例子脚本来处理类和个人吗?
发布于 2020-02-01 17:29:52
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.NewClassNameclass_var = my_onto["NewClassName"] # returns None if you pass wrong stringobj_var = my_onto.myObjNameobj_var = my_onto["myObjName"]注意,如果实例已经存在,则不会创建实例。所以下面的代码总是返回True
my_onto["myObjName"] is my_onto["myObjName"] # True我是在我的Python3.7和Owlready2 v0.23最近发布的时候这样做的(据pip install -U owlready2报道)。
(onto["ParentClass"],)只是从本体onto中获取所需的基类,并将其打包成一个元组(请注意语法(a,)以创建一个元素元组)。https://stackoverflow.com/questions/54620145
复制相似问题