#python #class #floating-point #hierarchy #lazy-evaluation
#python #класс #с плавающей запятой #иерархия #отложенная оценка
Вопрос:
Если я использую эту функцию для распечатки иерархии классов 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. Какая у вас версия Python? Ваш код показывает float на 2.7 и 2.6.
2. Python 2.6.1 (r261: 67515, июнь 24 2010, 21:47:49) [ GCC 4.2.1 (Apple Inc., сборка 5646)] на darwin
3. У меня также есть сборка 2.6.4. Когда я использую это, я получаю float без подталкивания и десятки других, которые не отображались в 2.6.1. Вот неполный список: многоточие в коде, перечисление экземпляра генератора фреймов, статический метод обратного среза, супер трассировка xrange
4. Моя версия 2.6.4, поэтому я предполагаю, что это поведение (ошибка?) было изменено между версиями.
5. Подтверждено — я только что протестировал с Mac версии v2.6.1, и float отсутствует. Работает на Ubuntu 2.6.6, Mac 2.6.6 и 2.7.1.
Ответ №1:
Похоже, это проблема с Python 2.6.1. float
отображается на моих установках (2.6.4 и 2.7, оба в Windows) и на других более новых версиях, протестированных Jay и samplebias.
Я искал что-то релевантное в журнале изменений CPython, но я не смог найти ничего, что, по-видимому, связано.