GAE: как получить доступ к значению свойства из @classmethod - PullRequest
0 голосов
/ 01 июня 2019

Как мы можем получить доступ к значению свойства в @classmethod?Например:

class Account(polymodel.PolyModel):
  someprop = ndb.StringProperty(required=True)
​
    @classmethod
    def get_or_create_someprop(cls):
        if not cls.someprop:
            # create someprop
        else: 
            return cls.someprop

В приведенном выше примере кода я пытаюсь создать someprop, если он не существует, или вернуть его, если он уже существует.Я предполагал, что приведенный выше код достигнет этогоТем не менее, первый шаг, который мне нужно сделать, это получить доступ к значению someprop из метода класса.Использование cls.someprop на самом деле не возвращает значение someprop, а вместо этого возвращает StringProperty('state').

Я пытался использовать this и self, которые undefined.

Итак, возможно ли получить доступ к значению свойства объекта с помощью метода класса?Если да, то как?

1 Ответ

0 голосов
/ 02 июня 2019

Как правило, вы не можете сделать это из метода класса, потому что свойство принадлежит объекту, то есть экземпляру класса (класс является просто генератором объекта). Другими словами, вам нужен аргумент self для ссылки на объект и его свойства.

В вашем конкретном случае класс представляет собой модель сущности (проект создания сущностей), а не сущность, и вы можете ссылаться только на свойство самой сущности.

Но вы должны быть в состоянии достичь того, что вы ищете, просто не объявляя его методом класса - тогда он становится методом объекта / сущности, и в этом случае вы можете ссылаться на свойство сущности через self вместо cls: self.someprop.

Я бы сделал проверку немного более конкретной, чтобы охватить случай, когда свойство имеет значение, например 0, или пустую строку, которая интерпретируется python как False в логической проверке: if self.someprop is None вместо if not self.someprop.

...