Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8

Возможна ли запись метода в методе

09.05.2022, 19:36. Показов 1271. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: запускается один из 2-х процессов по внешней команде или пусть будет, случайным образом. Процессы выполняются поочередно до получения команды на останов в одном из них.
Вроде ничего сложного:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
aa = process.Aaa()
bb = process.Bbb()
 
if start == a:
    first = aa
    second = bb
else:
    second = aa
    first = bb
while process:
    first
    if process == False:
        break
    second
Для меня сложность в том, что один из процессов запускается в 2 шага:
Python
1
2
argum = instance.method()
a = instance.method_2(argum)
А есть способы записать как-нибудь вроде
Python
1
aa = instance.method_2(instance.method())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2022, 19:36
Ответы с готовыми решениями:

Вызов метода на другом методе
Добрый день, понимаю, что вопрос довольно глупый, но все же хочу спросить. public static void Main(string args) { ...

Как в методе replaceAll передать аргумент метода?
public static boolean isPalindrome(String text) { String text1 = replaceAll(String text, String ""); StringBuilder...

Не выводится значение переменной метода в методе main()
В классе определен метод который считывает символы из файла в переменную и выводит её. Далее вызывается в методе main через экземпляр...

10
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
09.05.2022, 19:49
Цитата Сообщение от Somebody_Else Посмотреть сообщение
А есть способы записать как-нибудь вроде
Вот так и пиши
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8
09.05.2022, 20:34  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Вот так и пиши
У меня так не работает. Если ставлю по отдельности, то 1 повтор срабатывает, потом все сбивается, конечно. А если вставляю метод в в метод, то получаю ошибку
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

Я чуть знаю питон, но не программист. Класс и его методы писал не я, я там не разберусь. Но, как мне сказали, класс проверен и работает правильно. Нужно только внешнюю обвязку написать.
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
09.05.2022, 21:14
нужно смотреть в какой строке ошибка. это не от этого не работает а от того что где то вы пытаетесь сложить строку с числом или с объектом без типа. пару примеров
Python
1
2
3
4
5
6
7
def fun(num):
    b = 2*num
    return b
 
a = 2
a += fun(2)
print(a)
так работает без ошибок
>>> %Run test.py
6
>>>
ну а так выскакивает ваша ошибка (ну только у меня сложение а у вас цикл)

Python
1
2
3
4
5
6
def fun(num):
    b = 2*num
 
a = 2
a += fun(2)
print(a)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
1
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8
09.05.2022, 21:26  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
ну а так выскакивает ваша ошибка (ну только у меня сложение а у вас цикл)
Попробую разобраться.
А в самой логике этого цикла у меня все правильно?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
aa = process.Aaa()
bb = process.Bbb()
 
if start == a:
    first = aa
    second = bb
else:
    second = aa
    first = bb
while process:
    first
    if process == False:
        break
    second
0
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
09.05.2022, 22:28
Цитата Сообщение от Somebody_Else Посмотреть сообщение
А в самой логике этого цикла у меня все правильно?
Я сам в Питоне совсем недавно, потихоньку разбираюсь... В логике вроде все верно, но проблема будет с присвоениями. В Питоне переменная - объект, ссылающийся на другой объект, в вашем случае метод. У вас сначала одной переменной присваивается метод, потом второй переменной присваивается первая переменная (а по сути только ссылается). У вас, когда метод вернет значение переменной, первая ссылка(присваивание) слетит.
Примерно как тут:
Python
1
2
3
4
5
x = 3
y = x
print(x,y) # 3  3
y = y + 3
print(x,y) # 3  6
Ошибка наверняка из-за этого. Но я пока не подскажу, как в вашем случае правильно объявить переменные. Сам не знаю.
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
09.05.2022, 22:42
Как-то так?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
In [1]: class process():
    ...:     def Aaa(self):
    ...:         print("print from Aaa")
    ...:     def Bbb(self, other_method):
    ...:         print("print from Bbb")
    ...:         other_method()
    ...:
 
In [2]: p = process()
 
In [3]: p.Bbb(p.Aaa)
print from Bbb
print from Aaa
Python
1
2
3
4
5
6
7
8
9
10
11
In [4]: class process():
    ...:     def Aaa(self):
    ...:         return "print from Aaa"
    ...:     def Bbb(self, x):
    ...:         return x
    ...:
 
In [5]: p = process()
 
In [6]: p.Bbb(p.Aaa())
Out[6]: 'print from Aaa'
1
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8
09.05.2022, 23:30  [ТС]
Цитата Сообщение от Viller_dm Посмотреть сообщение
В Питоне переменная - объект, ссылающийся на другой объект, в вашем случае метод. У вас сначала одной переменной присваивается метод, потом второй переменной присваивается первая переменная (а по сути только ссылается). У вас, когда метод вернет значение переменной, первая ссылка(присваивание) слетит.
Точно. Именно так и происходит. Теперь понятно откуда ноги растут. Спасибо, я бы не вспомнил сам, хотя читал об этом.

Jabbson, спасибо.

Попробую разобраться. Если в циклах я более-менее разбираюсь, то про классы лишь в курсе в самых общих чертах.
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8
10.05.2022, 15:03  [ТС]
Jabbson,

Разобрался. Это не то. Ваш класс это метод в методе. Я думал причина ошибки в этом и создал тему. Оказалось причина ошибки в присваивании переменных.
0
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
10.05.2022, 15:22
Лучший ответ Сообщение было отмечено Somebody_Else как решение

Решение

А вот проверьте:

Python
1
2
3
4
5
6
7
    if start == a:
        process.Aaa()
    while process:
        process.Bbb()
        if process == False:
            break
        process.Aaa()
Только не запутайтесь тогда с тем, что возвращают process.Bbb() и process.Aaa(). Переменную process или просто True / False ?
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 8
10.05.2022, 17:07  [ТС]
Viller_dm,
Работает, спасибо огромное!
Пришлось prоcess объявить глобальной переменной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.05.2022, 17:07
Помогаю со студенческими работами здесь

Использование генератора случайных чисел в методе и вне метода
Приветствую всех!! Решил сделать игру Морской бой, это мой первый проект, так что все примитивно и смешно выглядит, но код, думаю, понять...

Видимость объекта, объявленного в одном методе, из другого метода
Добрый день! В методе A объявляю объект DataSet. Затем из метода А мне нужно многократно вызывать вспомогательный метод Б, ...

Определить в другом методе результат возвращения первого метода
У меня в классе есть публичный булевский метод Как определить в другом методе результат возвращения первого метода?

как использовать выходные значения метода в другом методе?
Здравствуйте! Возникла проблема с использованием двух значений a1 и a2, описанным в методе drob, в другом методе - __eq__. Я хочу написать...

Возможна ли запись в /sys/class/
Всем привет! Столкнулся с задачей, мне необходимо изменять яркость дисплея через ШИМ во встраиваемой системе. Из консоли делаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru