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

Как верно вызвать метод другого класса?

31.07.2015, 23:09. Показов 5274. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на Java, не понимаю как верно его реализовать на Python, интересует только реализация вызова метода класса А из объекта класса b:

Class A
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class A {
    private int intIndex;
    private String strIndex;
    
    public A(String index) {
        this.intIndex = str2Int(index);
        this.strIndex = index;
    }
    
    public A(int index) {
        this.intIndex = index;
        this.strIndex = int2Str(index);
    }
    
    public void aMethod() {
        System.out.println("Called method of A class");
    }
    
    public String toString() {
        return this.strIndex;
    }
    
    public int toInt() {
        return this.intIndex;
    }
    
    private static int str2Int(String value) {
        return Integer.parseInt(value);
    }
    
    private static String int2Str(int value) {
        return String.format("%s", value);
    }
}

Class B
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class B {
    private A newIndex;
    private A oldIndex;
    private String name;
    
    public B(A index, String name) {
        this.newIndex = new A(index.toInt() + 42);
        this.oldIndex = new A(index.toInt() - 42);
        this.name = name;
    }
    
    public void bMethod() {
        System.out.println("Called method of B class");
    }
 
    public String toString() {
        return String.format("%s:%s/%s", this.newIndex, this.oldIndex, this.name);
    }
    
    public A getIndex() {
        return this.newIndex;
    }
}


Java
1
2
3
4
5
6
7
8
9
class Main {
    public static void main (String[] args) {
        A a = new A("999999");
        B b = new B(a, "username");
        
        b.bMethod(); // "Called method of B class"
        b.getIndex().aMethod(); // "Called method of A class" - хочу понять как это реализовать
    }
}
Добавлено через 1 час 9 минут
Вот то, что я пытался сделать на Python, но не знаю как реализовать верно:
Class A
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A(object):
    def __init__(self, index):
        self._int_index = self.str_to_int(index)
        self._str_index = self.int_to_str(index)
 
    def a_method():
        print("Called method of A class")
 
    def str_to_int(self, value):
        return int(value)
 
    def int_to_str(self, value):
        return str(value)
 
    def to_str(self):
        return self._str_index
 
    def to_int(self):
        return self._int_index

Class B
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from A import A
 
 
class B(object):
    def __init__(self, index, name):
        self._new_index = A(index.to_int() + 42)
        self._old_index = A(index.to_int() - 42)
        self._name = name
 
    def b_method(self):
        print("Called method of B class")
 
    def get_new_index(self):
        return self._new_index  #не знаю как верно переделать это

Python
1
2
3
4
5
6
7
8
9
10
from A import A
from B import B
 
 
if __name__ == '__main__':
    a = A('999999')
    b = B(a, 'username')
 
    b.b_method() #Called method of B class
    b.get_new_index().a_method() #error: a_method() takes no argument (1 given)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2015, 23:09
Ответы с готовыми решениями:

Как вызвать метод класса?
class Solution: def searchRange(self, nums, target): left_target_index = self.binary_search_on_left(nums, target, 0,...

Как создать метод класса, который будет выводить на экран количество срабатываний другого класса
Я хочу чтобы можно было вызвать метод sign_in и при этом выводилось только 'Вы успешно вошли', а при вызове метода schet_vxodov выводилось...

Как вызвать определенный метод переданного класса через метод другого класса?
Добрый день. Захотел я вызвать в методе класса метод некоего другого класса, о котором я пока не знаю. Мне пришла в голову...

4
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
31.07.2015, 23:11
Ну все просто, вот так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Example1:
    def __init__(self, data1, data2):
        self.data1 = data1
        self.data2 = data2
 
    def out(self):
        print("Взыван метод класса {}".format(self.__class__.__name__))
 
 
class Example2:
    def __init__(self, data1, data2):
        self.data1 = data1
        self.data2 = data2
 
    def print_data(self):
        print([getattr(self, 'data{}'.format(i)) for i in (1, 2)])
 
 
inst1 = Example1('agg', 'foo')
inst1.out()
 
inst2 = Example2('1234', '687')
inst2.print_data()
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
31.07.2015, 23:13
Лучший ответ Сообщение было отмечено Monty_Python как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A(object):
    def __init__(self, index):
        self._int_index = self.str_to_int(index)
        self._str_index = self.int_to_str(index)
 
    def a_method(self): # <<<
        print("Called method of A class")
 
    def str_to_int(self, value):
        return int(value)
 
    def int_to_str(self, value):
        return str(value)
 
    def to_str(self):
        return self._str_index
 
    def to_int(self):
        return self._int_index
1
202 / 44 / 2
Регистрация: 19.03.2012
Сообщений: 283
31.07.2015, 23:20
С помощью рефлексии можно вот так динамически вызвать любые методы:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Example:
    def __init__(self, data1, data2):
        self.data1 = data1
        self.data2 = data2
 
    def print_data(self):
        print([getattr(self, 'data{}'.format(i)) for i in (1, 2)])
 
    def info(self):
        print('Метод класса {}'.format(self.__class__.__name__))
 
 
inst1 = Example('agg', 'foo')
for i in ('print_data', 'info'):
    getattr(inst1, i)()
Если, что-то не понятно, спрашивай, объясним.
1
 Аватар для Monty_Python
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
31.07.2015, 23:57  [ТС]
так тупанул... просто не указал self в методе 'a_method' класса А, как подсказал Cra3y
думал что совсем другая реализация нужна, как раз getattr выглядел лучше всего, теперь понял что это такое и как он работает, но оказывается всё проще
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2015, 23:57
Помогаю со студенческими работами здесь

Как вызвать метод из другого класса?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Как вызвать метод из другого класса
Есть класс Player, в нем есть метод &quot;Shoot&quot;, как из него вызвать метод BCheck из класса &quot;HUDController&quot;? Просто мне нужно обновить...

Как вызвать метод из другого класса в kv файле?
Здравствуйте! Знаю как &quot;привязать&quot; один класс к другому и, следовательно методы &quot;привязываемого&quot; класса в .py. Знаю как...

Как вызвать в Main метод из другого класса?
Задачка на среднее арифметическое. Создал класс &quot;Array&quot;, в котором происходит заполнение массива числами, затем числа из массива и...

Как вызвать метод из другого класса java в Android Studio?
Добрый день! Никак не могу понять почему при попытке вызвать функцию или метод из другого класса приложение просто тупо вылетает. Применял...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru