提取方法并在原始方法调用后插入调用

Extract method and insert call after original method call

我正在使用 PyCharm 并且我正在尝试进行一些重构,但不知道我如何能够以快速可靠的方式进行重构。

我有一个方法做的事情太多,我想将一部分提取到另一个方法中。提取的方法不应在提取方法中调用,而应在调用方法中调用。

当前状态

class User():
  def doStuff(self):
    calculateA()
    calculateB()
    calculateC()

def callerA():
  # do other things before
  obj.doStuff()

def callerAA:
  # do other things before
  obj.doStuff()

#... and many more methods calling doStuff method

求购

class User():
  def doStuff(self):
    calculateA()

  def doOtherStuff(self):
    calculateB()
    calculateC()

def callerA():
  obj.doStuff()
  obj.doOtherStuff()

def callerAA:
  obj.doStuff()
  obj.doOtherStuff()

#... and many more methods calling doStuff method and doOtherStuff

# Now I'll be able to create this new method only doing a subset of the original method
def aNewMethod:
   obj.doStuff()


这可能与 PyCharm 有关吗?一直在玩重构,但没有任何运气。提取到方法中是我认为的简单部分,但方法调用将在错误的位置结束。如果在 Intellij 中可行,我也有许可证,所以我可以切换。

没有这样的选项。欢迎您在 https://youtrack.jetbrains.com/issues/PY 提交功能请求 有关如何使用 YouTrack 的信息:https://intellij-support.jetbrains.com/hc/en-us/articles/207241135-How-to-follow-YouTrack-issues-and-receive-notifications

第 1 步:将两个新方法提取到您的 User class

这个:

class User():
  def doStuff(self):
    calculateA()
    calculateB()
    calculateC()

变为:

class User():
  def doStuff(self):
    newMethodA()
    newMethodB()

  def newMethodA(self):
    calculateA()

  def newMethodB(self):
    calculateB()
    calculateC()

第 2 步:内联 doStuff 方法

class User():

  def newMethodA(self):
    calculateA()

  def newMethodB(self):
    calculateB()
    calculateC()

def callerA():
  newMethodA()
  newMethodB()

def callerAA():
  newMethodA()
  newMethodB()

步骤 3:重命名方法