Является ли способ узнать, отвечает ли класс методу в Python? как в рубине:
class Fun
def hello
puts 'Hello'
end
end
fun = Fun.new
puts fun.respond_to? 'hello' # true
Также есть способ узнать, сколько аргументов требуется методу?
Является ли способ узнать, отвечает ли класс методу в Python? как в рубине:
class Fun
def hello
puts 'Hello'
end
end
fun = Fun.new
puts fun.respond_to? 'hello' # true
Также есть способ узнать, сколько аргументов требуется методу?
Хммм.... Я бы подумал, что hasattr
и callable
будет самым простым способом достижения той же цели:
class Fun:
def hello(self):
print 'Hello'
hasattr(Fun, 'hello') # -> True
callable(Fun.hello) # -> True
Вы можете, конечно, вызвать callable(Fun.hello)
из пакета обработки исключений:
try:
callable(Fun.goodbye)
except AttributeError, e:
return False
Что касается интроспекции числа требуемых аргументов; Я думаю, что это было бы сомнительной ценностью для языка (даже если бы оно существовало на Python), потому что это ничего не сообщит вам о требуемой семантике. Учитывая как легкость определения опционных/дефолтных аргументов, так и функций и методов переменных аргументов в Python, кажется, что знание "требуемого" количества аргументов для функции было бы очень мало (с программной/интроспективной перспективы).
Имеет метод:
func = getattr(Fun, "hello", None)
if callable(func):
...
Arity:
import inspect
args, varargs, varkw, defaults = inspect.getargspec(Fun.hello)
arity = len(args)
Обратите внимание, что arity может быть почти что угодно, если у вас есть varargs
и/или varkw
not None.
dir(instance)
возвращает список атрибутов объектов. getattr(instance,"attr")
возвращает атрибут объекта. callable(x)
возвращает значение True, если x является вызываемым.
class Fun(object):
def hello(self):
print "Hello"
f = Fun()
callable(getattr(f,'hello'))
Я не эксперт по Ruby, поэтому я не уверен, отвечает ли это на ваш вопрос. Я думаю, вы хотите проверить, содержит ли объект метод. Существует множество способов сделать это. Вы можете попробовать использовать функцию hasattr()
, чтобы узнать, есть ли у объекта метод:
hasattr(fun, "hello") #True
Или вы можете следовать руководству python , не просите спросить, просто спросите, просто поймайте исключение, созданное, когда объект не имеет метода:
try:
fun.hello2()
except AttributeError:
print("fun does not have the attribute hello2")