我试图获取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
希望现在更清楚
答案 0 :(得分:1)
您已将此声明为类方法。这意味着self
不是Game的实例,而是类本身。所以self.user_word
指的是在类上定义的属性,而不是通过实例可用的字符串。
使用普通的@property
装饰器,或者将其作为标准方法保留。