与此问题有关:
https://stackoverflow.com/questions/8708525/how-to-check-if-mako-function-exist
我想检查一个给定类是否存在一个函数,但是没有继承,所以父类可以调用子函数,否则会导致无限递归..
编辑:
它实际上给出了最大堆栈级别错误,这是相同的。
等效代码为:
class A(object):
def f(x):
b = B()
b.f()
class B(A):
pass
a = A()
a.f()
我知道这不是干净或首选,但它是模板翻译的内容,我不知道如何检查它。
答案 0 :(得分:8)
我想检查一个给定类是否存在函数,但是不存在继承的
是的,您可以直接查看班级词典。使用 __ dict __ 属性或内置的 vars() 函数::
>>> class A(object):
def f(x):
pass
>>> class B(A):
def g(x):
pass
>>> 'f' in vars(B)
False
>>> 'g' in vars(B)
True
答案 1 :(得分:2)
如果您需要检查方法是否直接在实例的类中定义而不是在其祖先之一中,那么您可以尝试:
import inspect
def has_method(obj, name):
v = vars(obj.__class__)
# check if name is defined in obj's class and that name is a method
return name in v and inspect.isroutine(v[name])
class A:
def foo(self):
print 'foo'
class B(A):
pass
b = B()
a = A()
print has_method(a, 'foo') # => True
print has_method(b, 'foo') # => False