Comment vérifier si un attribut de classe est une méthode d'instance
-
11-09-2019 - |
Question
En Python je dois tester efficacement et génériquement si un attribut d'une classe est une méthode d'instance. Les entrées à l'appel serait le nom de l'attribut en cours de vérification (une chaîne) et un objet.
hasattr retourne vrai indépendamment du fait que l'attribut est une méthode d'instance ou non.
Toutes les suggestions?
Par exemple:
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
La solution
def hasmethod(obj, name):
return hasattr(obj, name) and type(getattr(obj, name)) == types.MethodType
Autres conseils
import types
print isinstance(getattr(your_object, "your_attribute"), types.MethodType)
Vous pouvez utiliser le module 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
Cette fonction vérifie si l'attribut existe et puis vérifie si l'attribut est une méthode à l'aide du module 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")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow