Перечислить все базовые классы в иерархии данного класса?

Если Вы действительно только ожидаете один единственный результат, действительно имеет смысл добавлять ПРЕДЕЛ Вашему запросу. Я не знаю внутренние работы MySQL, но я уверен, что он не соберет набор результатов 100'000 + записи только для усечения его назад к 1 в конце..

122
задан martineau 26 December 2016 в 22:54
поделиться

4 ответа

inspect.getmro (cls) работает для как новый, так и старый классы, и возвращает то же самое, что и NewClass.mro () : список класса и всех его классов-предков в порядке, используемом для разрешения метода.

>>> class A(object):
>>>     pass
>>>
>>> class B(A):
>>>     pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
178
ответ дан 24 November 2019 в 01:23
поделиться

inspect.getclasstree () создаст вложенный список классов и их баз. Использование:

inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
31
ответ дан 24 November 2019 в 01:23
поделиться

См. Свойство __ Basis __ , доступное в классе Python , которое содержит кортеж базовых классов:

>>> def classlookup(cls):
...     c = list(cls.__bases__)
...     for base in c:
...         c.extend(classlookup(base))
...     return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
40
ответ дан 24 November 2019 в 01:23
поделиться

вы можете использовать кортеж __ base __ объекта класса:

class A(object, B, C):
    def __init__(self):
       pass
print A.__bases__

Кортеж, возвращаемый __ base __ , имеет все его базовые классы.

Надеюсь, это поможет!

21
ответ дан 24 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

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