2010-08-07 4 views
1

Я понимаю, почему Python требует явного определения self при обращении к атрибутам экземпляра.Забыть о себе определитель: как поймать эту ошибку?

Но я часто забываю об этом, так как он не нужен в C++.

Ошибка, которую я представляю таким образом, иногда чрезвычайно трудно поймать; например, предположим, что я пишу

if x is not None: 
    f() 

вместо

if self.x is not None: 
    f() 

Предположим, атрибут x обычно None, так f() редко называют. И предположим, что f() создает только тонкий побочный эффект (например, изменение числового значения или очистку кеша и т. Д.). Если у меня не будет безумного количества модульных тестов, эта ошибка, вероятно, останется незамеченной в течение длительного времени.

Мне интересно, знают ли кто-нибудь методы кодирования или функции IDE, которые могут помочь мне поймать или избежать этого типа ошибок.

+1

Не указывайте свои переменные как 'x' и т. Д. –

+0

@Hamish, дайте ему перерыв, это всего лишь образец кода. –

ответ

5

Не указывайте атрибуты экземпляра так же, как ваши глобальные/местные.

Если в данный момент нет ни одного глобального пользователя, зарегистрируйтесь, при попытке получить сообщение self.foo, вы получите ошибку global "foo" is not defined, но забудьте об self..

В качестве следствия: укажите переменные описательные имена. Не назовите все x - это не так значительно реже, вы будете иметь переменные с тем же именем, что и атрибуты, это также упрощает чтение кода.

+0

Ahh, отлично. Я уже делаю все, как вы сказали, я просто не понимал, что глобальные переменные не будут определены, просто обратившись к ним! :) Я хотел бы добавить, что я просто попытался задание х = «что-то» и он также был пойман во время компиляции: AttributeError: объект 'Синтаксический не имеет атрибута «х» Так все хорошо , – max

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