我正在尝试打印未从其他类继承的方法的列表(例如,未从object
或另一个基类继承的方法)。例如,我有以下课程:
class Point:
def __init__(self, x, y):
self.__x=x
self.__y=y
调用此方法应打印:
没有[__init__]
的{{1}}(从object继承)。
我尝试过:
__str__
,但是问题在于它包括已经继承的方法。
答案 0 :(得分:3)
要打印诸如类对象之类的对象的非继承属性,请使用vars
来检查该对象的__dict__
:
In [1]: class Point:
...: def __init__(self, x, y):
...: self.__x=x
...: self.__y=y
...:
In [2]: vars(Point)
Out[2]:
mappingproxy({'__dict__': <attribute '__dict__' of 'Point' objects>,
'__doc__': None,
'__init__': <function __main__.Point.__init__>,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'Point' objects>})
由于方法只是类中的可调用对象,因此您可以使用以下方法检查它:
In [3]: for k, v in vars(Point).items():
...: if callable(v):
...: print(k)
...:
__init__
答案 1 :(得分:2)
您可以查看类本身的__dict__
:
import types
def list_methods(t):
for name, item in t.__dict__.items():
if isinstance(item, types.FunctionType):
print(name)
t
在这里是类对象,而不是类的实例。如果要对实例进行操作,请在循环中将t.__dict__.items()
替换为type(t).__dict__.items()
。