py2中GraphObject的动态特性新奥格姆

2024-05-19 17:07:29 发布

您现在位置:Python中文网/ 问答频道 /正文

使用py2neo的ogm模块,您可以为neo4j中的节点构建对象:

class Person(GraphObject):
    __primarykey__ = 'name'

    name = Property()

    def __init__(self, name):
        self.name = name


peter = Person('peter')

graph.create(peter)

是否可以向Person对象添加动态属性?你知道吗

peter = Person('peter')

# this does not work
peter.last_name = 'jackson'

graph.create(peter)

可以先创建一个节点,然后再添加属性,但是使用动态属性创建GraphObjects会更容易。你知道吗


Tags: 模块对象nameself属性节点create动态
1条回答
网友
1楼 · 发布于 2024-05-19 17:07:29

我为这个问题想出了一种蛮力解决方案:

撕掉对象的类,将新属性放入类中,然后在对象意识到刚刚发生的事情之前将其填充回对象中:D

from py2neo.ogm import GraphObject, Property
from py2neo import Graph

class Person(GraphObject):
    __primarykey__ = "name"

    name = Property()

    def __init__(self, name):
        self.name = name

    def add_new_property(self, name, value):
        self.__class__ = type(
            type(self).__name__, (self.__class__,), {name: Property()}
        )
        setattr(self, name, value)


peter = Person("peter")
peter.add_new_property("lastname", "jackson")


g = Graph(host="localhost", user="neo4j", password="neo4j")
tx = g.begin()
tx.merge(peter)
tx.commit()

在这个小实验室里工作。但应该在更复杂的环境中进行测试。你知道吗

来自DZD的欢呼:)

蒂姆

相关问题 更多 >