Если я правильно понял, вы могли бы просто использовать встроенную функцию dir()
.Пример:
>>> class Foo(object):
... def m1(self):
... pass
... def m2(self):
... pass
...
>>> dir(Foo)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'm1', 'm2']
>>> [m for m in dir(Foo) if '__' not in m]
['m1', 'm2']
РЕДАКТИРОВАТЬ: Ваш вопрос и ваши комментарии не совсем понятны.Было бы полезно, если бы вы могли отредактировать свой вопрос, указав ожидаемый результат.Мое лучшее предположение, читая ваш комментарий здесь ( "Мне нужен этот словарь {int type: method type}
" ), вы можете захотеть:
>>> dict(enumerate([getattr(Foo, m) for m in dir(Foo) if '__' not in m]))
{0: <unbound method Foo.m1>, 1: <unbound method Foo.m2>}
EDIT2: Когда вы пишете:
packet_ids_to_check_up = (0x0404, 0x0405, 0x0404, 0x0505, 0x0506)
for packet_id in packet_ids_to_check_up:
if packet_id in some_class_obj:
some_class_obj[packet_id]('Hello world')
, вы, похоже, ожидаете, что ваш класс будет действовать как словарь.В этом случае вам, вероятно, следует взглянуть на модуль collections.abc
и, в частности, класс MutableMapping
.Из Python Glossary :
mapping - Контейнерный объект, который поддерживает поиск произвольных ключей и реализует методы, указанные в абстрактных базовых классах Mapping или MutableMapping.Примерами могут служить dict, collection.defaultdict, collection.OrderedDict и collection.Counter.
Это подразумевает реализацию следующих методов:
__contains__
keys
items
values
get
__eq__
__ne__
pop
popitem
clear
update
setdefault
Тем не менее, из вашего кода не совсем очевидно, почему вы не можете просто обойтись без использования простого словаря (или, в конечном итоге, подкласса dict
напрямую ...).
Помогает ли это?