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

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

  • phpdude

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

    Spritz Апрель 24, 2014, 1:35 п.п.

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

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

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

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

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

    Spritz Апрель 24, 2014, 1:38 п.п., спустя 3 минуты 36 секунд

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

  • phpdude

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

    Spritz Апрель 24, 2014, 1:55 п.п., спустя 16 минут 38 секунд

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

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

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

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

    Spritz Апрель 24, 2014, 3: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

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

    Spritz Апрель 24, 2014, 3:45 п.п., спустя 16 минут 44 секунды

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

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

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

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

    Spritz Апрель 24, 2014, 4:01 п.п., спустя 15 минут 55 секунд

    ммм

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

    Спустя 72 сек.

    или locals()

  • phpdude

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

    Spritz Апрель 24, 2014, 4:02 п.п., спустя 1 минуту 39 секунд

    ммм

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

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

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

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

    Spritz Апрель 24, 2014, 4:04 п.п., спустя 1 минуту 42 секунды

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

  • phpdude

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

    Spritz Апрель 24, 2014, 4:05 п.п., спустя 55 секунд

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

    @Sinkler, конечно

    >>> int
    <type 'int'>
    

    Спустя 23 сек.

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

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

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

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

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

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

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

    Spritz Апрель 24, 2014, 4:13 п.п., спустя 3 минуты 43 секунды

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

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

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

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

    Спустя 11 сек.

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

    Спустя 8 сек.

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

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

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

    Spritz Апрель 25, 2014, 12:11 д.п., спустя 7 часов 57 минут 48 секунд

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

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

    Spritz Апрель 25, 2014, 12:57 д.п., спустя 46 минут 10 секунд

    Я когда помнил пхп-функции и не знал python-альтернативы, то пользовался Php2Python - Python alternatives to PHP functions, classes and libraries - Php2Python [php2python.com]

    Но, к сожалению, PHP function.class-exists in Python - Php2Python [php2python.com] нет описания, так что все что вы сказали выше примерно то что надо

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

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

    Spritz Апрель 25, 2014, 1:52 д.п., спустя 54 минуты 45 секунд

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

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

    Спустя 12 сек.

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

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

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