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;
}
Если вы хотите проверить класс и напечатать имя и ссылку на функцию для каждого метода с аргументом из двух аргументов, см. Блок кода ниже.
При проверке метода 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>>
Если у вас есть экземпляр класса, вы можете получить доступ к методам этого экземпляра:
mc = MyClass()
run_funcs([mc.m1, mc.m2])