Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters PyCharm提取参数通常不起作用:“无法使用所选元素执行重构”_Parameters_Refactoring_Pycharm - Fatal编程技术网

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

Parameters PyCharm提取参数通常不起作用:“无法使用所选元素执行重构”,parameters,refactoring,pycharm,Parameters,Refactoring,Pycharm,我希望能够在此添加一个参数,以便在其他情况下,我可以使用不同的表达式,而不是self.my_字段,可能是self.my_其他_字段或self.my_字段+1。我选择self.my_字段并执行重构>提取>参数。我收到一个错误,说无法使用所选元素执行重构 它应该能够重构,因为my_方法的调用类似于self.my_方法或其他_obj.my_方法。它可以将这些字段更改为self.my_methodself.my_字段或other_obj.my_methodother_obj.my_字段 一般来说,我只能

我希望能够在此添加一个参数,以便在其他情况下,我可以使用不同的表达式,而不是self.my_字段,可能是self.my_其他_字段或self.my_字段+1。我选择self.my_字段并执行重构>提取>参数。我收到一个错误,说无法使用所选元素执行重构

它应该能够重构,因为my_方法的调用类似于self.my_方法或其他_obj.my_方法。它可以将这些字段更改为self.my_methodself.my_字段或other_obj.my_methodother_obj.my_字段


一般来说,我只能在表达式非常简单(如常量)时才能使用提取参数功能。如果它是一个依赖于现有参数值的表达式,则它不起作用。我猜self是现有参数的一个特例。这只是extract参数的一个限制,还是我做错了?

看起来您实际上要做的是相反的

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

我选择self.my_字段

您可能是无意中选择了方法中的语句,或者试图通过重构来修改表达式。或者,如果有其他问题,您是否可以澄清您的预期结果?在后一种情况下,这更适合于替代重构

通常,通过提取重构代码需要一段代码:

def my_方法: 返回1+2

把它的内脏移到别处:

定义我的方法A=1,b=2: 返回a+b

在您的代码片段中: 定义我的自我: printself.my_字段*2
方法的主体是非包容性的,因此从语句中提取是没有意义的。相反,您似乎只想在my_方法声明中用self.my_other_字段替换self.my_字段。同样,由于您的示例很简单,所以有点不清楚。

我希望结果是该方法的定义类似于def my_methodself,param:print param*2,并且对self.my_方法的调用被self.my_methodself.my_字段替换。好的,我明白了。我可以通过使用重构工具来实现这一点,它可以向预先存在的方法添加一个参数,并重构预先存在的调用以包含它。是的,好的。它更为手动,因为您必须将要用作默认值的表达式复制到“更改签名”对话框中,然后用新参数的名称替换该表达式。但是谢谢你的努力。
def my_method(self):
    print self.my_field * 2