Как получить класс для наследования от всех тех же классов, что и другой класс - PullRequest
2 голосов
/ 02 ноября 2019

Когда вы создаете класс, один из входных данных является кортежем базовых классов для наследования.

Например,

class K(str, list, dict):
    pass

... или ...

Klass = type("Klass", (Class1, Class2, Class3), dict())

Я хочу, чтобы класс наследовал от всех тех же классов, что и другой класс. inspect.getmro() возвращает нечто гораздо более сложное, чем простой кортеж, в котором каждый элемент является классом.

Предположим, что нам нужен тот же порядок разрешения методов.

def mro2tuple(_mro):
    # MAGIC HAPPENS HERE
    return tuppy

Как получить кортежбазовых классов из порядка разрешения методов? Мне было интересно, могу ли я написать что-то вроде следующего:

import inspect
Klass1_mro = inspect.getmro(Klass1)
bases = mro2tuple(Klass1_mro):
Klass2 = type("Klass2", bases, dict())

1 Ответ

4 голосов
/ 02 ноября 2019

Вы не должны пытаться наследовать от mro, достаточно просто наследовать от баз другого класса.

new_class = type('Newclass', old_class.__bases__, {})
...