Тестирование для конкретного метода в классе Python - PullRequest
2 голосов
/ 06 июня 2011

Каков наилучший (или «Pythonic») способ проверить, определен ли в классе определенный метод?

Обе эти работы работают, но во втором они не кажутся «правильными», я просто пытаюсь получить к ним доступ и получить исключение, если оно не существует.Есть ли лучший / более правильный путь?

class TestClass(object):
    def TestFunc(self):
        pass



if 'TestFunc' in dir(TestClass):
    print 'yes'
else:
    print 'No'



try:
    if TestClass.__getattribute__(TestClass, 'TestFunc'):
        print 'yes'

except:
    print 'No'

Ответы [ 2 ]

10 голосов
/ 06 июня 2011

Использование hasattr:

class Foo(object):
    def bar():
        pass

assert hasattr(Foo, 'bar')

Если вы действительно хотите проверить, является ли атрибут методом , вы можете сделать это:

assert hasattr(Foo, 'bar') and callable(getattr(Foo, 'bar'))
3 голосов
/ 06 июня 2011

Ты рядом.

Прощать проще, чем спрашивать разрешения.

try:
    testClassInstance.testFunc()

except AttributeError:
    pass # Ask forgiveness.

Не "предварительно проверяй" на такие вещи. Предположим, они существуют и справляются с их отсутствием.

...