класс с плавающей точкой в ​​Python не отображается в иерархии классов, если он не "расширен" - PullRequest
3 голосов
/ 08 мая 2011

Если я по какой-то причине использую эту функцию для распечатки иерархии классов Python, тип "float" не отображается в выводе.

def printHier(cls, indent = 0, tab = "  "):

    print "%s%s" % (tab*indent, cls.__name__)

    try:
        subclasses = cls.__subclasses__()
    except TypeError:
        subclasses = cls.__subclasses__(cls)

    subclasses.sort(key = lambda v: v.__name__)

    for subcls in subclasses:
        printHier(subcls, indent = indent + 1)

printHier(object)

Если я определю эту дополнительную функцию (ниже) и вызову ее перед вызовом первой, то всплывает float. Кто-нибудь может объяснить это странное поведение? Есть ли что-то ленивое в некоторых классах Python? Я спрашиваю себя, не может ли он пропустить некоторые другие классы.

def tweak(cls):
    """
     for some reason "float" doesn't show up in hierarchy unless
     we "prod" it...
    """
    superclasses = cls.__mro__

tweak(float)

1 Ответ

4 голосов
/ 09 мая 2011

Кажется, проблема с Python 2.6.1. float отображается в моих установках (2.6.4 и 2.7, как в Windows), так и в других более новых версиях, протестированных Jay и samplebias.

Я искал что-то релевантное в журнале изменений CPython, но не смог найти ничего похожего.

...