def my_method(self):
print self.my_field * 2
我希望能够为此添加参数,以便在其他情况下我可以使用不同的表达式而不是self.my_field
,可能是self.my_other_field
或self.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
是现有参数的特例。这只是提取参数的限制,还是我做错了?
答案 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
。同样,由于您的示例简单,它有点不清楚。