Думаю, вам стоит взглянуть на пакет inspect
.Это позволяет вам «обернуть» некоторые вещи.При использовании метода dir
в нем также перечисляются встроенные методы, унаследованные методы и все другие атрибуты, делающие возможными коллизии, например:
class One(object):
def f_one(self):
return 'class one'
class Two(One):
def f_two(self):
return 'class two'
if __name__ == '__main__':
print dir(Two)
Массив, полученный из dir(Two)
, содержит как f_one
, так иf_two
и много встроенных вещей.С inspect
вы можете сделать это:
class One(object):
def f_one(self):
return 'class one'
class Two(One):
def f_two(self):
return 'class two'
if __name__ == '__main__':
import inspect
def testForFunc(func_name):
## Only list attributes that are methods
for name, _ in inspect.getmembers(Two, inspect.ismethod):
if name == func_name:
return True
return False
print testForFunc('f_two')
В этих примерах все еще перечисляются оба метода в двух классах, но если вы хотите ограничить проверку только функциями в определенном классе, это требует немного больше работы,но это абсолютно возможно.