LINUX.ORG.RU

Ответ на: комментарий от takino

У меня в функции есть некий объект. Я пытаюсь достать из него строку, но ни одни из способов (методом тыка и попытками вызывать методы его родителей) это не получилось.

Я хз че с ним делать, вот хочу методы узнать. В принципе, можно имя, но это вряд ли поможет.

Deleted
()
Ответ на: комментарий от northicewind

inspect

Не могу разобраться как заюзать. Есть у меня объект, дальше что? В примерах в гугле какие-то обертки и trace'ы, которые мне не нужны вообще.

Мне бы dir, но для методов.

Deleted
()
Ответ на: комментарий от val-amart

Оно только имена параметров пишет, или нет?

Deleted
()

Ну и как вы думаете, какой метод дергать? http://pastebin.com/AeFbEQz7 У меня задача - вытянуть значение из строки в таблице. Пробовал дергать метод data - не получилось. Теперь ищу как.

Deleted
()
Ответ на: комментарий от Deleted

Смотря из какой строки. Если из выбранной, то getSelectedRows, а потом из них уже текст

northicewind
()

Экземпляр объекта? Что-то новенькое.

help(объект) (скорее всего)

объект.__doc__ (возможно)

Ты как хирург, делающий операцию с анатомическим справочником в руке.

Virtuos86 ★★★★★
()

Ставишь ipython, там автодополнение по табу плюс интерактивная помощь.

provaton ★★★★★
()
Ответ на: комментарий от J

Опять веселишься?

Скорее страдаю.

Deleted
()
Ответ на: комментарий от Deleted
package main;

class PublicMorozov
{
  // заготавливаем инстанс, для которого мы будем создавать экземпляр inner класса
  private static final PublicMorozov INSTANCE = new PublicMorozov();
  // и поле, содержимое которого и будем заменять
  private static final java.lang.ref.WeakReference<Inner> targetField = new java.lang.ref.WeakReference<Inner>(null);

  private class Inner
  {}

  public PublicMorozov()
  {}

  public static void makeReplace() throws Exception
  {
    // получаем через рефлект поле, которое предстоит заменить
    java.lang.reflect.Field targetAsField = Class.forName("main.PublicMorozov").getDeclaredField("targetField");
    // снимаем с него private
    targetAsField.setAccessible(true);

    // получаем адрес поля модификаторов в целевом поле
    java.lang.reflect.Field modifiers = Class.forName("java.lang.reflect.Field").getDeclaredField("modifiers");
    // снимаем с него private
    modifiers.setAccessible(true);

    // снимаем с целевого поля private и final, а вместо них ставим public
    modifiers.setInt(targetAsField, targetAsField.getModifiers() & ~java.lang.reflect.Modifier.FINAL);
    modifiers.setInt(targetAsField, targetAsField.getModifiers() & ~java.lang.reflect.Modifier.PRIVATE);
    modifiers.setInt(targetAsField, targetAsField.getModifiers() | java.lang.reflect.Modifier.PUBLIC);

    // но всё не так просто... если попытаться применить изменения то нас может отправить куда подальше с IllegalAccessException
    // поэтому мы заменяем accessor на свой, которому будет пофиг на финал
    // мы используем именно overrideFieldAccessor поскольку поле изначально было private, в противном случае следует использовать fieldAccessor
    java.lang.reflect.Field accessorField = Class.forName("java.lang.reflect.Field").getDeclaredField("overrideFieldAccessor");
    // как обычно снимаем с него private
    accessorField.setAccessible(true);
    // поскольку мы заменяем статический Object нам нужен именно этот тип, их много под разные типы полей и данных
    java.lang.reflect.Constructor accessorConstructor = Class.forName("sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl").getDeclaredConstructor(java.lang.reflect.Field.class, boolean.class);
    // конструктор тоже сокрыт... но разве нас этим испугаешь?
    accessorConstructor.setAccessible(true);
    // вот теперь всё нормально - новый accessor на поле final и смотреть не будет
    accessorField.set(targetAsField, accessorConstructor.newInstance(targetAsField, false));

    // и на десерт - доступ к inner классу
    java.lang.reflect.Constructor innerConstructor = Class.forName("main.PublicMorozov$Inner").getDeclaredConstructor(Class.forName("main.PublicMorozov"));
    innerConstructor.setAccessible(true);

    // заменяем таки содержимое нужного поля
    targetAsField.set(null, new java.lang.ref.WeakReference<Inner>((Inner) innerConstructor.newInstance(INSTANCE)));
  }
}

В плюсах обычно Паблика кастуют проще: #define private public

svr4
()
Последнее исправление: svr4 (всего исправлений: 2)
Ответ на: комментарий от Deleted
 methods = [foo.__getattr__(field).__name__ for field in dir(foo) if isinstance(foo.__getattr__(field), type(foo.__new__)]

Пусть эта строка навсегда отучит тебя от подобных извращённых желаний.

userid2
()

от ЧВ

Я кончаю, представляя, как провожу членом по твоим губам, а ты жадно пьёшь мою сперму

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.