Проблема с переопределением конструктора StructuredNode

1

Я получаю эту ошибку при попытке переопределить конструктор 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()

Мне интересно, правильно ли я это использую?

Благодарю.

  • 0
    Назначение tmp_node в вашей трассировке стека не соответствует назначению в коде, который вы предоставили (значения для test явно отличаются). Пожалуйста, убедитесь, что вы предоставили код, который определенно вызывает ошибку, и предоставьте точную ошибку, которая генерирует код, в противном случае мы не можем быть уверены, что мы ищем код, который действительно имеет проблему, с которой вы сталкиваетесь.
  • 0
    Прости за это. Я сделал свои правки.
Теги:
neo4j

1 ответ

0

Пожалуйста, взгляните на * 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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню