12

Python では、クラスの属性がインスタンス メソッドであるかどうかを効率的かつ一般的にテストする必要があります。呼び出しへの入力は、チェックされる属性の名前 (文字列) とオブジェクトです。

hasattr は、属性がインスタンス メソッドであるかどうかに関係なく true を返します。

助言がありますか?


例えば:

class Test(object):
    testdata = 123

    def testmethod(self):
        pass

test = Test()
print ismethod(test, 'testdata') # Should return false
print ismethod(test, 'testmethod') # Should return true
4

5 に答える 5

17
def hasmethod(obj, name):
    return hasattr(obj, name) and type(getattr(obj, name)) == types.MethodType
于 2009-07-07T09:33:55.020 に答える
7

モジュールを使用できinspectます:

class A(object):
    def method_name(self):
        pass


import inspect

print inspect.ismethod(getattr(A, 'method_name')) # prints True
a = A()
print inspect.ismethod(getattr(a, 'method_name')) # prints True
于 2009-07-07T09:35:20.990 に答える
6
import types

print isinstance(getattr(your_object, "your_attribute"), types.MethodType)
于 2009-07-07T09:32:10.343 に答える
4

この関数は、属性が存在するかどうかを確認してから、その属性がinspectモジュールを使用するメソッドであるかどうかを確認します。

import inspect

def ismethod(obj, name):
    if hasattr(obj, name):
        if inspect.ismethod(getattr(obj, name)):
            return True
    return False

class Foo:
    x = 0
    def bar(self):
        pass

foo = Foo()
print ismethod(foo, "spam")
print ismethod(foo, "x")
print ismethod(foo, "bar")
于 2009-07-07T09:35:49.447 に答える