Как часть проекта Python для начинающих, я в настоящее время создаю базу данных слов, будь то существительные, глаголы, определители, прилагательные.Извлечение объекта класса из словаря
Теперь проблема заключается в том, что слова, считываемые в программу с помощью метода lexicon.readfromfile
, помещаются в словарь через экземпляр класса (будь то существительное, глагол или прилагательное). Это создало проблему, что я совершенно не знаю, как назвать эти объекты из словаря, так как они не имеют переменные в качестве ключей, а ячейку памяти (см ниже):
{<__main__.Verb object at 0x02F4F110>, <__main__.Noun object at 0x02F4F130>, <__main__.Adjective object at 0x02F4F1D0>, <__main__.Noun object at 0x02F4F170>}
Кто-нибудь есть идеи, как Я могу называть эти ключи таким образом, чтобы я мог использовать их в своем коде?
Вот часть я застрял на:
Добавьте метод
getPast()
кVerb
класса, который возвращает прошедшее время отVerb
. Ваш методgetPast()
может выполнить простую работу, извлекая значение «прошлого» из атрибутов.
Вот большинство коды, оставляя вне Noun
и Adjective
классов:
class Lexicon(object):
'A container clas for word objects'
def __init__(self):
self.words = {}
def addword(self, word):
self.words[word.stringrep] = word
def removeword(self, word):
if word in self.words:
del(word)
print('Word has been deleted from the Lexicon')
else:
print('That word is not in the Lexicon')
def getword(self,wordstring):
if wordstring in self.words:
return self.words[wordstring]
else:
return None
def containsword(self,string):
if string in self.words:
return True
else:
return False
def getallwords(self):
allwordslist = []
for w in self.words:
allwordslist.append(self.words[w])
return set(allwordslist)
def readfromfile(self, x):
filehandle = open(x, 'r')
while True:
line = filehandle.readline()
if line == '':
break
line = line.strip()
info = line.split(',')
if info[1] == 'CN' or info[1] == 'PN':
noun=Noun(info[0],info[1])
noun.setattribute('regular',bool(info[2]))
self.addword(noun)
elif info[1] == 'A':
adjective=Adjective(info[0],info[1])
adjective.setattribute('comparative', bool(info[2]))
self.addword(adjective)
elif info[1] == 'V':
verb=Verb(info[0],info[1])
verb.setattribute('transitive', bool(info[2]))
verb.setattribute('past', info[3])
self.addword(verb)
def writetofile(self, x):
filehandle = open(x, 'w')
for t in self.words.values():
filehandle.write(t.getFormattedString() + '\n')
filehandle.close()
#---------------------------------------------------------------------------#
class Word(object):
'A word of any category'
def __init__(self,stringrep,category):
self.wordattribute = {}
self.stringrep = stringrep
self.category = category
def setattribute(self, attributename, attributevalue):
self.wordattribute[attributename] = attributevalue
def getvalue(self,name):
if name in self.wordattribute:
return self.wordattribute[name]
else:
return none
def __str__(self):
return self.stringrep + ':' + self.category
def __lt__(self,otherword):
return self.stringrep < otherword.stringrep
class Verb(Word):
'"Represents a Verb."'
def __init__(self, stringrep, category):
super().__init__(stringrep,category)
def istransitive(self):
return self.transitive
def getFormattedString(self):
n = '{stringrep},{category}'
n = n.format(stringrep=self.stringrep, category=self.category)
for i in range(1,2):
for v,b in self.wordattribute.items():
n = n+','+str(b)
return n
@jonrsharpe: :-P –
Связанный: http://stackoverflow.com/q/1535327/3001761. Кроме того, это похоже на 'set', а не' dict'. – jonrsharpe