Написание небольшой функции внутри метода класса[Python]

Если у меня есть скрипт типа:

class ClassA(object):
    ...
    def methodA(...):
        varA=...

        def funcA(...):
            ...

        varA=funA(...)

Я имею в виду, что собираюсь написать небольшую функцию внутри метода класса, которая используется только внутри этого метода класса. Подходит ли этот стиль кода? Я думаю, что это немного некрасиво. Есть ли альтернатива?


person ThunderEX    schedule 21.12.2012    source источник
comment
Одна потенциальная проблема заключается в том, что вы будете переопределять funcA каждый раз, когда вызывается methodA.   -  person Blender    schedule 21.12.2012
comment
Рассматривали ли вы вместо этого использование лямбда-функции?   -  person Martin Green    schedule 21.12.2012
comment
@Blender, тогда как мне избежать переопределения funcA?   -  person ThunderEX    schedule 21.12.2012
comment
@ThunderEX: определив его вне methodA.   -  person Blender    schedule 21.12.2012
comment
Почему ты так поступаешь? Есть ли у вас причина поместить funcA внутри methodA, а не где-то еще (или просто выполнять свои операции непосредственно в теле methodA)?   -  person BrenBarn    schedule 21.12.2012
comment
@BrenBarn, потому что таким образом кажется яснее, что funA работает только для метода A   -  person ThunderEX    schedule 21.12.2012
comment
@ThunderEX: Но тогда какой смысл делать из этого функцию? Почему бы просто не поместить его содержимое прямо в methodA?   -  person BrenBarn    schedule 21.12.2012
comment
@BrenBarn Потому что этот фрагмент кода часто используется в методе   -  person ThunderEX    schedule 21.12.2012
comment
См. этот вопрос от всего час назад для некоторого обсуждения.   -  person BrenBarn    schedule 21.12.2012
comment
@BrenBarn хорошо! Я собираюсь сохранить его первоначальный стиль сейчас.   -  person ThunderEX    schedule 21.12.2012
comment
@ThunderEX, я бы сделал это только в том случае, если функция действительно должна быть вложенной, например. если он обращается к некоторым переменным из области охвата метода или если вам каждый раз нужны разные значения по умолчанию (хотя partial может быть предпочтительнее во втором случае). Тем не менее, в этой ситуации это совершенно нормально. Не беспокойтесь о переопределении функции каждый раз, когда вызывается метод: определение функции не дороже, чем создание любого другого объекта.   -  person Duncan    schedule 21.12.2012


Ответы (1)


Красота в глазах смотрящего.

Совершенно нормально иметь очень "локальную" функцию, вложенную в другую функцию, особенно с точки зрения удобочитаемости кода.

Другие будут спорить со стилем кодирования и передовой практикой.

Это ваш код, и вы должны чувствовать себя хорошо с ним, чтобы понять и прочитать его позже.

Так что, если это устраивает вас и ваше понимание «хорошего» кода, вперед.

person Andreas Jung    schedule 21.12.2012