ФорумПрограммированиеPython → Проверить возможность создания объекта по имени

Проверить возможность создания объекта по имени

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 2:35

    В пхп есть функции аля class_exists

    Есть название типа объекта, нужно проверить можно ли его создать по имени.

    Чото в голову ничего не приходит, эдво?) Тупо туплю

    Сапожник без сапог
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 2:38, спустя 3 минуты 36 секунд

    в питоне вроде есть эксепшн NameError

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 2:55, спустя 16 минут 38 секунд

    в питоне вроде есть эксепшн NameError

    @Sinkler, есть, но как его использовать хз

    Сапожник без сапог
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 4:28, спустя 1 час 32 минуты 52 секунды

    тебе же типа так нужно?

    $name = 'TestCls';
    if (class_exists($name))
    {
            $object = new $name();
    }
    else
    {
            die('not found');
    }
    

    Спустя 232 сек.

    из гугла

    >>> module_name = 'pprint'  
    >>> class_name = 'PrettyPrinter'
    >>> imported_module_object = __import__(module_name)
    >>> kls = getattr(imported_module_object, class_name)
    >>> pp = kls()
    >>> pp.__class__.__name__
    'PrettyPrinter'
    >>> repr(pp)
    pprint.prettyprinter
    

    ну и будет валиться NameError при неудаче, видимо

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 4:45, спустя 16 минут 44 секунды

    @Sinkler, такой метод я знаю. но мне надо в текущем контексте попробовать создать. то что ты указал это стандартный путь "подгрузить модуль и взять оттуда (getattr) нужный тип, ну или попробовать взять".

    мне надо без загрузки, попытаться создать в текущем контексте

    Сапожник без сапог
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:01, спустя 15 минут 55 секунд

    ммм

    m = globals()['TestCls']()

    Спустя 72 сек.

    или locals()

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:02, спустя 1 минуту 39 секунд

    ммм

    m = globals()['TestCls']()

    @Sinkler, это первое о чем я подумал. мимо :(

    globals()['int']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'int'
    
    Сапожник без сапог
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:04, спустя 1 минуту 42 секунды

    а он там типа есть?

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:05, спустя 55 секунд

    а он там типа есть?

    @Sinkler, конечно

    >>> int
    <type 'int'>
    

    Спустя 23 сек.

    двойной эскейпинг в код куоте. блея. пофиксите кто нить )

    Сапожник без сапог
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:09, спустя 4 минуты 15 секунд

    я, наверное, не понял. это ведь нужно?

    class int():
            def test(self):
                    print 123;
    m = globals()['int']()
    m.test()
    
  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 5:13, спустя 3 минуты 43 секунды

    @Sinkler, нет не это)

    нашел вроде решение короче я

    проверю на builtins хотя бы

    dir(__builtins__)
    
    
    type(__builtins__.bin)
      <type 'builtin_function_or_method'>
    type(__builtins__.bool)
      <type 'type'>
    

    Спустя 11 сек.

    этого будет достаточно для меня :-)

    Спустя 8 сек.

    по крайней мере сейчас

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 24 апреля 2014 г. 13:11, спустя 7 часов 57 минут 48 секунд

    http://stackoverflow.com/questions/6383379/python-check-if-object-exists-in-scope
    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 13:57, спустя 46 минут 10 секунд

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 24 апреля 2014 г. 14:52, спустя 54 минуты 45 секунд

    http://stackoverflow.com/questions/6383379/python-check-if-object-exists-in-
    scope

    @master, не то. такая же ссыка как от синклера

    Спустя 12 сек.

    @adw0rd, да я уже решил пролему

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!