gpt4 book ai didi

python - 在 python 中查找实例的所有成员,不包括 __init__

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:56 24 4
gpt4 key购买 nike

vars 关键字为我提供了一个实例中的所有变量,例如:

In [245]: vars(a)
Out[245]: {'propa': 0, 'propb': 1}

但是,我不知道有一个解决方案可以列出我的类中定义的所有可调用成员(例如,参见此处:Finding what methods an object has),我添加了这个简单的改进,它排除了 __init__ :

In [244]: [method for method in dir(a) if callable(getattr(a, method)) and not method.startswith('__')]
Out[244]: ['say']

比较:

In [243]: inspect.getmembers(a)
Out[243]:
[('__class__', __main__.syncher),
('__delattr__',
<method-wrapper '__delattr__' of syncher object at 0xd6d9dd0>),
('__dict__', {'propa': 0, 'propb': 1}),
('__doc__', None),
...snipped ...
('__format__', <function __format__>),
('__getattribute__',
<method-wrapper '__getattribute__' of syncher object at 0xd6d9dd0>),
('__hash__', <method-wrapper '__hash__' of syncher object at 0xd6d9dd0>),
('__init__', <bound method syncher.__init__ of <__main__.syncher object at 0xd6d9dd0>>),
('__module__', '__main__'),
('__setattr__',
<method-wrapper '__setattr__' of syncher object at 0xd6d9dd0>),
('__weakref__', None),
('propa', 0),
('propb', 1),
('say', <bound method syncher.say of <__main__.syncher object at 0xd6d9dd0>>)]

或者例如:

In [248]: [method for method in dir(a) if callable(getattr(a, method)) 
and isinstance(getattr(a, method), types.MethodType)]
Out[248]: ['__init__', 'say']

我还找到了这个方法,它排除了内置例程:

In [258]: inspect.getmembers(a, predicate=inspect.ismethod)
Out[258]:
[('__init__',
<bound method syncher.__init__ of <__main__.syncher object at 0xd6d9dd0>>),
('say', <bound method syncher.say of <__main__.syncher object at 0xd6d9dd0>>)]

所以,我的问题是: 您是否有更好的方法在 Python 2.7.X 中查找类中的所有方法(不包括 __init__ 和所有内置方法)?

最佳答案

由于没有其他人提供更好的解决方案,我想 Pythonic 的方法是使用 Python 的 STL:

inspect.getmembers(a, predicate=inspect.ismethod)

要排除 init 可以使用 filter

关于python - 在 python 中查找实例的所有成员,不包括 __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com