Как передать указатели на функции из методов класса

class A 
{ 
    int x; 
};  

class B 
{ 
    B( ) : x(1), c('a') { } 
    int x; 
    char c; 
};  

int main( ) 
{ 
    A a; 
    B b; 
    a = b;     // b.c == 'a' is "sliced" off
    return 0; 
}
2
задан petezurich 24 March 2019 в 17:11
поделиться

2 ответа

Если вы хотите проверить класс и напечатать имя и ссылку на функцию для каждого метода с аргументом из двух аргументов, см. Блок кода ниже.

При проверке метода argspec, если у него есть два аргумента, первым в методе класса является «self», поэтому при вызове ему потребуется только один аргумент.

В приведенном ниже цикле: метод [0] - это имя, а метод [1] - ссылка на метод.

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

import inspect

class MyClass():
    def m1(self, o):
        return 'method1'
    def m2(self, o):
        return 'method2'

mc = MyClass()

for method in inspect.getmembers(mc): 
    if isinstance(method[1], type(mc.m1)): 
        if len(inspect.getfullargspec(method[1]).args) == 2: 
            print(f'mc.{method[0]}') 
            print(f'  mc.{method[1]}') 

>>> mc.m1
>>>  mc.<bound method MyClass.m1 of <funcs_from_class.MyClass object at 0x11181e6d8>>
>>>mc.m2
>>>  mc.<bound method MyClass.m2 of <funcs_from_class.MyClass object at 0x11181e6d8>>
0
ответ дан hjonez 24 March 2019 в 17:11
поделиться

Если у вас есть экземпляр класса, вы можете получить доступ к методам этого экземпляра:

mc = MyClass()
run_funcs([mc.m1, mc.m2])
0
ответ дан John Gordon 24 March 2019 в 17:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: