Nano Hash - криптовалюты, майнинг, программирование

GAE - класс модели хранилища данных с функцией, которая сама помещает себя в базу данных?

Я пытаюсь написать класс модели хранилища данных, в котором есть функция, которая создает объект и сразу добавляет его в хранилище данных. Это то, что у меня сейчас есть (что не работает):

class Channel(db.Model):
    name = db.StringProperty(required = True)
    subscriber_list = db.ListProperty(users.User)

    def addChannelWithName(name):
        channel = Channel()
        channel.name = name
        channel.put()

Из этого я получаю проблему, что первое, что передается в addChannelWithName(), должно быть экземпляром канала, но, конечно, с тем, что я пытаюсь сделать, экземпляр канала еще не должен существовать. Он должен быть создан во время этой функции. Как я должен сделать эту работу? Есть ли способ сохранить эту функцию как метод Channel или это должна быть функция, полностью отдельная от класса? Или я должен делать что-то еще? Спасибо много!


Ответы:


1

Или вы можете сделать это методом класса или статическим методом. Таким образом, если вы используете модель где-то еще, вам не нужно импортировать отдельную функцию из модуля.

class Channel(db.Model):
    name = db.StringProperty(required = True)
    subscriber_list = db.ListProperty(users.User)

    @classmethod
    def addChannelWithName(cls,name):
        channel = cls()
        channel.name = name
        channel.put()

или статический метод и опустите cls.

Вы бы назвали его Channel.addChannelWithName(name). Если вы используете класс или статический метод, я бы удалил бит «Channel» из имени метода, поскольку он избыточен. т.е. Channel.addWithName(name), потому что вы вызываете его только из класса.

14.04.2013
  • def __init__(self,*args, **kwargs): super(Канал, self).__init__(*args, **kwargs) 14.04.2013
  • Будьте осторожны, у вас обычно нет метода ____init____ в классах моделей, если только вы не знаете, что делаете. db.Model активно использует метаклассы. Если вы посмотрите вокруг, вы увидите, что это распространенный вопрос, и вас обычно предупреждают об этом. например stackoverflow.com/questions/1913775/ 14.04.2013
  • Я использовал его для проверки уникальности поля, не знал, что это может быть проблематично. 14.04.2013

  • 2

    Я думаю, что самое простое решение — сделать его автономной функцией верхнего уровня вместо метода. (Вы можете сделать это статическим методом или - с изменением сигнатуры вызова - методом класса, но я не вижу в этом никаких преимуществ.)

    14.04.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..