2013-03-09 2 views
1

Не знаете, почему этот код не работает.Def не работает

class convert_html(sublime_plugin.TextCommand): 
    def convert_syntax(self, html, preprocessor) 
    return "this is just a " + preprocessor + " test" 

    def convert_to_jade(self, html): 
    return self.convert_syntax(html, "jade") 

    def run(self, edit): 
    with open(self.view.file_name(), "r") as f: 
     html = f.read() 
     html = html.convert_to_jade(html) 
     print(html) 

Это говорит AttributeError: 'str' object has no attribute 'convert_html'

Как заставить его работать?

+0

добавить код, где вы используете этот класс – average

+3

Вы пропускаете двоеточие в конце 'четкости convert_syntax (я, html, препроцессор) ' – Floris

ответ

6

Вы должны вызвать метод convert_to_jade() с использованием переменной self, которая действует как ссылка на текущий объект класса. Совершенно аналогично this указателя в C++ или java

html = self.convert_to_jade(html) 

Python передает этот дескриптор экземпляра неявно в качестве первого аргумента метода при вызове self.something(). И без дескриптора экземпляра (т. Е. self) вы не сможете получить доступ к каким-либо переменным экземпляра.

BTW, необязательно указывать первый аргумент методов экземпляра как self, но это общепринятое соглашение.

Подробнее о selfhere

Следующий код должен работать:

class convert_html(sublime_plugin.TextCommand): 
    def convert_syntax(self, html, preprocessor): 
    return "this is just a " + preprocessor + " test" 

    def convert_to_jade(self, html): 
    return self.convert_syntax(html, "jade") 

    def run(self, edit): 
    with open(self.view.file_name(), "r") as f: 
     html = f.read() 
     html = self.convert_to_jade(html) 
     print(html) 
+0

он работает, спасибо! – Jasper

+0

Я также пробовал 'html = convert_to_jade (html)' и 'def convert_to_jade (html):' но это не сработало. Не могли бы вы объяснить, почему? – Jasper

+0

@Steve см. Править, есть недостающее ':' – tacaswell

Смежные вопросы