测试Python类中的特定方法

tMC*_*tMC 2 python oop methods class

测试一个类是否定义了特定方法的最佳(或'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'
Run Code Online (Sandbox Code Playgroud)

sen*_*rle 10

用途hasattr:

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

assert hasattr(Foo, 'bar')
Run Code Online (Sandbox Code Playgroud)

如果你真的想测试属性是否是一个方法,你可以这样做:

assert hasattr(Foo, 'bar') and callable(getattr(Foo, 'bar'))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这内部工作就像第二个.一个很大的优点是,即使属性和其他东西不在`__dict __,`__slots__`等,这两个工作. (2认同)