gpt4 book ai didi

python - py2neo.ogm 中 GraphObject 的动态属性

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:27 24 4
gpt4 key购买 nike

使用 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 会更容易。

最佳答案

我想出了一种针对这个问题的强力解决方案:

撕掉对象的类,将新属性添加到类中,然后在对象意识到刚刚发生的情况之前将其放回对象中: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 的欢呼:)

蒂姆

关于python - py2neo.ogm 中 GraphObject 的动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com