Проблема с переопределением конструктора StructuredNode
Я получаю эту ошибку при попытке переопределить конструктор StructuredNode, в то время как это почти точно такой же код из документа.
Traceback (most recent call last):
File "/Users/xiao/PycharmProjects/Fooga_New/test/tmp.py", line 48, in <module>
tmp_node = Item(test='test_test_test')
File "/Users/xiao/PycharmProjects/Fooga_New/test/tmp.py", line 45, in __init__
super(Item, self).__init__(self, *args, **kwargs)
File "/Users/xiao/PycharmProjects/python3_venv/lib/python3.6/site-packages/neomodel/core.py", line 203, in __init__
super(StructuredNode, self).__init__(*args, **kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
Вот мой код:
from neomodel import db, StructuredNode, StringProperty
db.set_connection('bolt://' + 'neo4j' + ':' + '5428' + '@' + '192.168.0.24' + ':' + '7687')
class Item(StructuredNode):
name = StringProperty(unique_index=True)
uid = StringProperty(unique_index=True)
def __init__(self, test, *args, **kwargs):
# self.product = product
kwargs["uid"] = 'g.' + str(test)
kwargs["name"] = test
super(Item, self).__init__(self, *args, **kwargs)
tmp_node = Item(test='test_test_test')
tmp_node.save()
Мне интересно, правильно ли я это использую?
Благодарю.
1 ответ
Пожалуйста, посмотрите на *args и **kwargs? прежде чем идти.
В вашем примере вы можете использовать test
Параметр двумя способами:
from neomodel import db, StructuredNode, StringProperty
from neomodel import config
config.DATABASE_URL = 'bolt://neo4j:neo4j@localhost:7687'
# Using `*args`: The first parameter to the constructor defines the `test`
class Item(StructuredNode):
uid = StringProperty(unique_index=True)
name = StringProperty(unique_index=True)
def __init__(self, *args, **kwargs):
if args:
test = args[0]
kwargs['uid'] = 'g.' + str(test)
kwargs['name'] = test
super(Item, self).__init__(**kwargs)
else:
print('no test')
item = Item('test_test_test')
item.save()
# or using `**kwargs`: a entry `test` in kwargs defines the `test` for uid and name
class Kitem(StructuredNode):
uid = StringProperty(unique_index=True)
name = StringProperty(unique_index=True)
def __init__(self, *args, **kwargs):
if kwargs and 'test' in kwargs:
test = kwargs['test']
kwargs.pop('test',None)
kwargs['uid'] = 'g.' + str(test)
kwargs['name'] = test
super(Kitem, self).__init__(**kwargs)
else:
print('no test')
kitem = Kitem(test='test_test_test_k')
kitem.save()