python:打印非继承的方法

时间:2018-10-24 03:26:04

标签: python python-3.x class

我正在尝试打印未从其他类继承的方法的列表(例如,未从object或另一个基类继承的方法)。例如,我有以下课程:

class Point:
    def __init__(self, x, y):
        self.__x=x
        self.__y=y

调用此方法应打印: 没有[__init__]的{​​{1}}(从object继承)。

我尝试过:

__str__

,但是问题在于它包括已经继承的方法。

2 个答案:

答案 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()