当前位置: 首页 > 知识库问答 >
问题:

仅获取类的声明方法(不包括继承类的方法)

贺高飞
2023-03-14

我在Python 3.5中遇到了一个问题。我有一个类(B ),它继承了另一个类(A)。我试图只获取B中声明的方法,但它返回了B类中声明的方法,也从a类继承了方法。

这里的代码:

class A:

    def a_method_1(self):
        """ WILL BE OVERRIDEN """
        return True

    def a_method_2(self):
        """ WON'T BE OVERRIDEN """
        return True


class B(A):

    def b_method_1(self):
        """ NOT OVERRIDEN """
        return True

    def get_methods(self):
        """ 
           NOT OVERRIDEN 
           This function filters special python methods. 
        """

        methods = [method for method in dir(self) if callable(getattr(self, method))
                      and not method[:2] == '__']
        return methods

    def a_method_1(self):
        """ OVERRIDEN """
        return True


if __name__ == "__main__":
    B_obj = B()
    print(B_obj.get_methods())

返回:

>>> ['a_method_1', 'a_method_2', 'b_method_1', 'get_methods']

我想要:

>>> ['a_method_1', 'b_method_1', 'get_methods']

如何修改get_methods来过滤继承的方法?

祝你今天愉快,谢谢。

共有1个答案

汲时铭
2023-03-14

使用变量:

>>> vars(B)
mappingproxy({'__doc__': None,
              '__module__': '__main__',
              'a_method_1': <function __main__.B.a_method_1>,
              'b_method_1': <function __main__.B.b_method_1>,
              'get_methods': <function __main__.B.get_methods>})


>>> import inspect
>>> [name for name, attr in vars(B).items() if inspect.isfunction(attr)]
['b_method_1', 'get_methods', 'a_method_1']
 类似资料:
  • 我有以下类(请注意,方法是静态的): 当我打电话的时候: 我想得到输出:

  • 问题内容: 我有两个课,和。它们看起来像这样: 此错误指向Field的: 我希望首先调用Background init ()。要将“ a,b”传递给Fields的 init (),Field会分配a和b,然后将其中包含三个0的列表分配给field。然后让Background的 init ()继续,然后调用它自己的buildField()并用包含c的列表覆盖self.field。 似乎我还没有完全理

  • 本文向大家介绍JavaScript类的继承方法小结【组合继承分析】,包括了JavaScript类的继承方法小结【组合继承分析】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript类的继承方法。分享给大家供大家参考,具体如下: 在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的函数称为子类型(子类,派生类)。继承也有之前问题,比如字面量

  • 我对遗传的理解是相当基础的。

  • 我想知道如何获取一个方法的返回值,并在直接跟随它的另一个方法中使用它。例如,假设我这样做了: 在这里,我想使用乘法方法中的4作为一个值,然后使用加法方法将我给它的任何值加到乘法结果4上。 注意:我知道我可以做到: 但是我想知道如何使用这种格式。 我想完成的是: 当我运行它时,输出将是 9,因为 2 * 2 = 4 5 = 9。请向我解释一下:)