【问题标题】:Testing for specific method in a Python class测试 Python 类中的特定方法
【发布时间】:2011-09-09 10:06:36
【问题描述】:

测试一个类是否定义了特定方法的最佳(或“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'

【问题讨论】:

标签: python oop class methods


【解决方案1】:

使用hasattr:

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

assert hasattr(Foo, 'bar')

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

assert hasattr(Foo, 'bar') and callable(getattr(Foo, 'bar'))

【讨论】:

  • 请注意,这在内部像第二个一样工作。一个很大的优势是,即使在 __dict____slots__ 等中没有的属性和其他东西上,这两者也可以工作。
  • 这不会说它是否是一个方法 - 只是它是在那个类上定义的
  • @Gerrat,我想到了这一点,但是因为 OP 的示例做了 hasattr 所做的事情,所以我认为这就是他想做的事情。不过,我已经对其进行了编辑以涵盖方法案例。
【解决方案2】:

你已经接近了。

请求宽恕比请求许可更容易。

try:
    testClassInstance.testFunc()

except AttributeError:
    pass # Ask forgiveness.

不要“预先测试”这样的事情。假设他们存在并应对他们的缺席。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多