通过StringProperty迭代

时间:2016-04-23 19:11:31

标签: python google-app-engine

我试图获取StringProperty的值(作为字符串),但没有成功。 我需要遍历它并且如果我只是尝试迭代属性它会引发错误,因为它不是可迭代的。 我怎么能将StringProperty转换为Python字符串,或者我可以迭代并具有len的东西?

编辑:

这就是我如何声明有问题的种类:

class Game(ndb.Model):
"""Game object"""
target = ndb.StringProperty(required=True)
attempts_allowed = ndb.IntegerProperty(required=True)
attempts_remaining = ndb.IntegerProperty(required=True, default=5)
game_over = ndb.BooleanProperty(required=True, default=False)
user = ndb.KeyProperty(required=True, kind='User')
users_word = ndb.StringProperty(required=True)

最后一个属性是我需要迭代的属性。这是引发错误的函数:

@classmethod
def update_users_word(self, letter):
    word_as_list = list(self.users_word)
    print ("String is: " + str(getattr(self, 'users_word')))

    for pos in self.find_letter_positions_in_word(letter, self.target):
        word_as_list[pos] = letter

    self.users_word = ''.join(word_as_list)

这是确切的错误:

Number/models.py", line 59, in update_users_word
word_as_list = list(self.users_word)
TypeError: 'StringProperty' object is not iterable

希望现在更清楚

1 个答案:

答案 0 :(得分:1)

您已将此声明为类方法。这意味着self不是Game的实例,而是类本身。所以self.user_word指的是在类上定义的属性,而不是通过实例可用的字符串。

使用普通的@property装饰器,或者将其作为标准方法保留。