#python #function #class #oop
#питон #функция #класс #ООП
Вопрос:
Я сделал следующий урок:
class Plugins: def __init__(self): pass def voter_rep(self, loc, start_header, end_header): self.loc = loc ocr_xml = AbbyyXML(loc) xml_doc = XMLDoc(ocr_xml, CONSTANTS) xml_doc.split_words("", False) self.start_header = start_header self.end_header = end_header header_pages = xml_doc.se_page(start_header, end_header) ## and stuff voter_dict = {'Voter':[], 'Record_Key':[], 'Comments':[]} ## and stuff return voter_dict, rep_dict
если я запускаю функцию метода самостоятельно и вне класса, она работает совершенно нормально, а именно, если я напишу функцию как:
def voter_rep(loc, start_header, end_header): ocr_xml = AbbyyXML(loc) xml_doc = XMLDoc(ocr_xml, CONSTANTS) xml_doc.split_words("", False) header_pages = xml_doc.se_page(start_header, end_header) ## and stuff voter_dict = {'Voter':[], 'Record_Key':[], 'Comments':[]} ## and stuff return voter_dict, rep_dict
в одной только функции я избавляюсь self
и буду просто иметь voter_rep(loc, start_header, end_header)
, но когда я хочу вызвать ее из класса, я делаю plugins.voter_rep(loc, start_header, end_header)
то, что не работает, и она возвращает:
NameError: name 'plugins' is not defined
Интересно, почему моя функция работает сама по себе, но не может быть вызвана из класса?
Ответ №1:
Вы можете сделать
plugins = Plugins() loc = #some val start_header = #some val end_header = #some val plugins.voter_rep(loc, start_header, end_header)
Как видно из сообщения об ошибке, вы используете маленькую букву «р» вместо заглавной. Кроме того, поскольку это не статическая функция, поэтому не стоит называть ее именем класса.
Ответ №2:
Plugins.voter_rep(loc, start_header, end_header)
Обратите внимание на заглавную букву.
Комментарии:
1. Но в этом случае возникает вопрос: почему эта функция вообще является методом класса?
2. Моя глупая ошибка 😛
3. @Matthias, потому что это часть а большего модуля…