除非“prodded”,否则python float类不会出现在类层次结构中

时间:2011-05-07 21:17:15

标签: python class floating-point hierarchy lazy-evaluation

如果由于某种原因我使用此函数打印出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)

如果我定义了这个附加功能(如下所示)并在调用第一个函数之前调用它,则浮动显示。谁能解释这种奇怪的行为?有些python类有些懒惰吗?我想知道它是否也可能缺少其他一些课程。

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

tweak(float)

1 个答案:

答案 0 :(得分:4)

这似乎是Python 2.6.1的一个问题。 float显示我的安装(在Windows上为2.6.4和2.7)以及由Jay和samplebias测试的其他较新版本。

我在CPython更改日志中查找了相关内容,但我找不到任何似乎相关的内容。