In [5]: class Foo(object):
...: def m1(self):pass
...: def m2(self):pass
...:
In [6]: f = Foo()
In [7]: lst = dir(f)
In [8]: [m for m in lst if not m.endswith('__')]
Out[8]: ['m1', 'm2']
如果需要对象方法:
^{pr2}$
或者直接在列表中从实例中理解:
In [18]: [getattr(f, m) for m in lst if not m.endswith('__')]
Out[18]:
[<bound method Foo.m1 of <__main__.Foo object at 0x00000000073DD1D0>>,
<bound method Foo.m2 of <__main__.Foo object at 0x00000000073DD1D0>>]
编辑:那么,根据你在链接中给出的例子,也许你在寻找类似的东西:
class SomeClass:
store = {0: 'someMethod', 1: 'someMethod1'}
def __init__(self):
print('__init__')
def __del__(self):
print('__del__')
def get_dict(self):
return [getattr(self, att) for idx, att in SomeClass.store.items()]
def someMethod(): pass
def someMethod1(): pass
f = SomeClass()
print f.get_dict()
打印出:
__init__
[<bound method SomeClass.someMethod of <__main__.SomeClass instance at 0x0000000
0026E2E08>>, <bound method SomeClass.someMethod1 of <__main__.SomeClass instance
at 0x00000000026E2E08>>]
__del__
class Foo(object):
mapping = {'store': 'someMethod'}
def __getattribute__(self, attr):
try:
# first check if it's a "regular" attribute/method
return super(Foo, self).__getattribute__(attr)
except AttributeError:
# attribute was not found, if it's not in your mapping, re-raise the error
if attr not in self.mapping:
raise
mapped_attr = self.mapping[attr]
return super(Foo, self).__getattribute__(mapped_attr)
def someMethod(self):
print "Foo().someMethod()"
foo = Foo()
foo.store()
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')
扩展了@mac的答案,考虑到OP请求一个类实例变量,并且他可能还想获得关于“private”方法的信息:
如果需要对象方法:
^{pr2}$或者直接在列表中从实例中理解:
编辑:那么,根据你在链接中给出的例子,也许你在寻找类似的东西:
打印出:
我不确定是否理解您的问题,但是如果您想将方法名“映射”到其他方法(调用
Foo().store()
实际上会调用Foo().someMethod()
),而不引用它们,则可以通过重写默认的object.__getattribue__
行为来实现这一点。在输出:
^{pr2}$如果我说得对,您可以简单地使用内置函数^{} 。示例:
编辑:你的问题和评论都不太清楚。如果你能编辑你的问题,提到你的预期结果,那会有帮助。我最好的猜测是,阅读下面您的评论(“我需要这本字典
^{pr2}${int type: method type}
”)你可能会想要:编辑2:查看最新的pastebins,当您编写:
看来你想让你的班当字典。如果是这种情况,您可能应该看看^{} 模块,尤其是
^{bq}$MutableMapping
类。从python glossary:这意味着实施以下方法:
__contains__
keys
items
values
get
__eq__
__ne__
pop
popitem
clear
update
setdefault
然而,从你的代码来看,为什么你不能直接使用一个简单的字典(或者最终直接将
dict
子类化…)逃脱惩罚。在这有帮助吗?在
相关问题 更多 >
编程相关推荐