如何检查python中是否存在(但不是继承的)函数?

2024-05-03 15:13:09 发布

您现在位置:Python中文网/ 问答频道 /正文

与这个问题有关:

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()

我知道这不是干净或首选,但它是什么模板翻译,我不知道如何检查,否则。在


Tags: to函数httpscomifmakocheckfunction
2条回答

I want to check if a function exists for a given class, but not inherited

是的,你可以直接查字典。使用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

如果您需要检查方法是否直接在实例的类中定义,而不是在其祖先中定义,则可以尝试以下操作:

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

相关问题 更多 >