2016-05-04 7 views
2

Ich bin mir bewusst, dass ich 'Find Usages' verwenden kann, um zu finden, was eine Methode in einer Klasse aufruft. Gibt es eine Möglichkeit, dies für alle Methoden einer bestimmten Klasse zu tun? (oder in der Tat alle Methoden in der Datei)PyCharm: Liste alle Verwendungen aller Methoden einer Klasse

Use Case: Ich versuche, eine Gott-Klasse zu reformieren, das sollte fast sicher mehrere Klassen sein. Es wäre schön, in der Lage zu sein zu sehen, welche Teilmenge der Methoden der Gottklasse, die Klassen, die damit interagieren. Es sieht so aus, als ob PyCharm das schwer gemacht hat, lässt mich aber nicht skalieren.

Ich verwende 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 dort in PyCharm keine solche Option. Außerdem bin ich mir nicht sicher, ob ich den Vorteil eines solchen Features sehen kann: sagen Sie, Sie haben eine Klasse mit zwei Methoden und Sie hatten diese Funktion, und es würde sagen, dass diese beiden Methoden 146 Mal in Ihrem Projekt verwendet werden. Nun sagen wir, dass eine Methode nur einmal verwendet wird und die andere Methode 145 Mal verwendet wird. Was bedeutet die Nummer 146 jetzt? Was können Sie mit einer solchen Information machen? – alfasin

+0

Ich möchte gerne gesagt werden: [Klassen] verwenden Methode A, [Klassen] verwenden Methode B und/oder ClassA verwendet [Methoden], ClassB verwendet [andere Methode], ClassC verwendet [eine andere Methode] etc Dann wäre ich in der Lage, leichter herauszufinden, ob es in meiner Gottklasse bestimmte Funktionsuntergruppen gibt, die mir helfen würden, sie zu überarbeiten. – DeTeReR

+0

Ich würde argumentieren, dass die Gruppierung von Gruppen von Methoden durchgeführt werden sollte, die verwandte Funktionalitäten * nicht * durch die Verwendung haben. Durch das Aufräumen von oben nach unten können Sie möglicherweise auch andere Klassen bereinigen, während Sie mit dem ursprünglichen Ansatz (Gruppe nach Verwendung - von unten nach oben) eine unnötige Kopplung zwischen Codemodulen/Klassen erzeugen, die nicht gekoppelt werden sollten. – alfasin

Antwort

-1

Dies ist möglich, aber man muss mit der Abstraktion behandeln, sonst PyCharm das fragliche Verfahren nicht kennt, gehört zu Ihren spezifischen Klasse. AKA - Type Hinting

Jede Instanz dieser Methode, die in einer Abstraktionsschicht aufgerufen wird, die keinen Typhinweis enthält, wird nicht gefunden.

Beispiel:

#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() 
Verwandte Themen