2016-05-04 81 views
2

我知道我可以使用'查找用法'来找到在一个类中调用方法的内容。 对于给定类的所有方法,是否有这样的方法? (或者文件中的所有方法)PyCharm:列出一个类的所有方法的所有用法

用例:我试图重构一个神类,它几乎可以肯定是几个类。能够看到神类方法的哪个子集,与它交互的类使用会很好。似乎PyCharm已经完成了这一点,但不让我扩展它。

我使用PyCharm 2016年1月2日

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206666319-See-all-callers-of-all-methods-of-a-class

+0

AFAIK存在PyCharm没有这样的选择。此外,我不确定我能看到这样一个功能的好处:假设你有一个有两种方法的类,并且你有这个功能,并且它会说这两个方法在你的项目中使用了146次。现在让我们说一个方法只用了一次,另一个方法用了145次。数字146意味着什么?你能用这样的信息做什么? – alfasin

+0

我想告诉:[类]使用方法A,[类]使用方法B和/或类A使用[方法],类B使用[不同的方法集],类C使用[另一个不同的方法集]等 然后,我可以更轻松地弄清楚我的上帝课程中是否有不同的功能子集,这将帮助我重构它。 – DeTeReR

+0

我会争辩说,分组应该由具有相关功能的方法组来完成,而不是由用法组成。做清理自顶向下可能会帮助您清理其他类,同时使用原始方法(按使用分组 - 自下而上)可能会在不应耦合的代码模块/类之间产生不必要的耦合。 – alfasin

回答

-1

这是可能的,但你必须处理抽象的,否则Pycharm不知道问题的方法属于你的特定类。 AKA - Type Hinting

在没有类型提示的抽象层中调用该方法的任何实例都不会被找到。

实施例:

#The class which has the method you're searching for. 
class Inst(object): 
    def mymethod(self): 
     return 

#not the class your looking for, but it too has a method of the same name. 
class SomethingElse(object): 
    def mymethod(self): 
     return 

#Option 1 -- Assert hinting 
def foo(inst): 
    assert isinstance(inst, Inst) 
    inst.mymethod() 

#Option 2 -- docstring hinting 
def bar(inst): 
    """ 

    :param inst: 
    :type inst: Inst 
    :return: 
    :rtype: 
    """ 
    inst.mymethod() 
相关问题