Форум сайта python.su
Здавствуйте.
Функция является методом класса.
Допустим:
1) она вызвается из другого метода - один результат
2) пользователем в контексте объекта - другой
Возможно такое сделать? Не хочется писать еще одну фунцию, если можно обойтись одной.
Отредактировано Valera_idi_syuda (Март 25, 2017 00:11:08)
Офлайн
Передавать в качестве параметра функции флаг который будет определять что возвращать - такой вариант подойдет?
Офлайн
JOHN_16нет, функция без аргументов. Но если других вариантов нет, то можно добавить агрументы поумолчанию
Передавать в качестве параметра функции флаг который будет определять что возвращать - такой вариант подойдет?
Отредактировано Valera_idi_syuda (Март 25, 2017 00:21:58)
Офлайн
Вообще очень плохое поведение. Тут реально нужен флаг. Без флага возврат этой функции будет слегка присыпан магией, а это уже не хорошо и через полгодика выльется в боль…
Офлайн
Если функция делает два разных действия, нужно сделать из этого две функции. Так достигается функциональная прочность модуля. То есть функция конкретно отвечает на вопрос “что делает эта функция?”.
Вот пример функционально непрочного модуля (модуль из теории программирования, а не из питона)
def f(a, b): if a > 0: return a * b else: return a + b
def f1(a, b): return a * b def f2(a, b): return a + b if a > 0: n = f1(a, b) else: n = f2(a, b)
Отредактировано py.user.next (Март 25, 2017 10:14:05)
Офлайн
Valera_idi_syuda
Возможно такое сделать?
import inspect class A: def sam(self): if 'self.' + inspect.stack()[0].function in inspect.stack()[1].code_context[0]: print('Hey, I was invoked from another class method...') else: print('Hey, I was called as an instance method...') def sim(self): self.sam() a = A() a.sam() # Hey, I was called as an instance method... a.sim() # Hey, I was invoked from another class method...
Отредактировано scidam (Март 25, 2017 10:22:42)
Офлайн
scidam
Ну и на кой Вы это привели? Кто-то же скопипастит
Офлайн
Спасибо.
Офлайн