PyCharm提取参数通常不起作用:"无法使用所选元素执行重构"

时间:2016-09-12 20:55:58

标签: parameters refactoring pycharm

def my_method(self):
    print self.my_field * 2

我希望能够为此添加参数,以便在其他情况下我可以使用不同的表达式而不是self.my_field,可能是self.my_other_fieldself.my_field + 1 。我选择self.my_field并做Refactor>提取物>参数。我收到错误说"无法使用所选元素执行重构"。

它应该能够重构,因为my_method被称为self.my_method()other_obj.my_method()。它可以将这些更改为self.my_method(self.my_field)other_obj.my_method(other_obj.my_field)

一般来说,当表达式非常简单时,我只能使提取参数功能起作用,就像常量一样。如果它是一个表达式,取决于现有参数的值,它不起作用。我猜self是现有参数的特例。这只是提取参数的限制,还是我做错了?

1 个答案:

答案 0 :(得分:1)

您实际上要做的事情似乎是refactor through renaming而不是extracting a new parameter

您将注意到参数提取的预期功能是修改现有调用以包含新参数。但是,根据您在问题中所说的内容:

  

我选择了self.my_field

您可能会意外地在方法中选择语句,或者尝试通过重构来修改表达式。 (或者,如果还有其他内容,您是否可以澄清您的预期结果?)在后一种情况下,这将更适合替代重构。

通常,通过提取重构代码会占用一段代码:

def my_method(): return 1 + 2

并将其内部移动到其他地方:

def my_method(a=1,b=2): return a + b

在你的片段中: def my_method(self): print(self.my_field * 2) 方法的主体不具有包容性,因此从语句中提取是没有意义的。相反,您似乎只想在self.my_field声明中将self.my_other_field替换为my_method。同样,由于您的示例简单,它有点不清楚。