Как получить информацию о функции и вызвать ее - PullRequest
2 голосов
/ 31 июля 2009

Я хочу создать функцию, которая определяет, существует ли метод для данного экземпляра, какие параметры можно передать, а затем вызывает метод с надлежащими параметрами. Я новичок и понятия не имею, как это сделать: (

Ответы [ 4 ]

3 голосов
/ 31 июля 2009

Попробуйте hasattr

>>> help(hasattr)
Help on built-in function hasattr in module __builtin__:

hasattr(...)
    hasattr(object, name) -> bool

    Return whether the object has an attribute with the given name.
    (This is done by calling getattr(object, name) and catching exceptions.)

Для более углубленного самоанализа прочитайте о модуле inspect.

Но сначала расскажите, зачем вам это нужно. Есть 99% шансов, что существует лучший путь ...

1 голос
/ 31 июля 2009

Python поддерживает утку, набирающую - просто вызовите метод в экземпляре.

0 голосов
/ 31 июля 2009
class Test(object):
    def say_hello(name,msg = "Hello"):
        return name +' '+msg

def foo(obj,method_name):
    import inspect
    # dir gives info about attributes of an object
    if method_name in dir(obj):
        attr_info = eval('inspect.getargspec(obj.%s)'%method_name)
        # here you can implement logic to call the method
        # using attribute information
        return 'Done'
    else:
        return 'Method: %s not found for %s'%(method_name,obj.__str__)

if __name__=='__main__':    
    o1 = Test()
    print(foo(o1,'say_hello'))
    print(foo(o1,'say_bye'))

Думаю, модуль inspect очень поможет вам. Основные функции, используемые в приведенном выше коде: dir,eval,inspect.getargspec. Вы можете получить соответствующую помощь в документации по Python.

0 голосов
/ 31 июля 2009

Вы пытаетесь выровнять значения аргумента с функцией с неизвестной сигнатурой?

Как вы будете сопоставлять значения аргументов и переменные параметров? Guess?

Вы должны использовать какое-то совпадение имен.

Например, что-то вроде этого.

someObject.someMethod( thisParam=aValue, thatParam=anotherValue )

О. Подождите. Это уже первоклассная часть Python.

Но что, если метод не существует (по необъяснимым причинам).

try:
    someObject.someMethod( thisParam=aValue, thatParam=anotherValue )
except AttributeError:
    method doesn't exist.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...