2016-09-12 4 views
3
def my_method(self): 
    print self.my_field * 2 

다른 매개 변수를 추가하여 다른 경우 사용할 수 있도록하고 싶습니다. 표현식은 self.my_field 대신 self.my_other_field 또는 self.my_field + 1 일 수 있습니다. self.my_field를 선택하고 리 팩터> 추출> 매개 변수를 수행합니다. "선택한 요소를 사용하여 리팩토링을 수행 할 수 없습니다"라는 오류 메시지가 나타납니다.PyCharm 추출 매개 변수가 일반적으로 작동하지 않습니다. "선택한 요소를 사용하여 리팩토링을 수행 할 수 없습니다."

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

실제로 시도하려는 내용은 extracting a new parameter이 아닌 refactor through renaming 인 것 같습니다.

매개 변수 추출의 의도 된 기능은 기존 매개 변수를 수정하여 새 매개 변수를 포함한다는 것입니다. 그러나 귀하의 질문에 명시된 내용에 따라 : 나는 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) 메서드 본문은 포함되지 않으며 therefo 그것은 진술에서 추출하는 것이 합리적이지 않을 것입니다. 대신 self.my_fieldself.my_other_field으로 바꾸고 싶다면 my_method을 사용하는 것으로 보입니다. 다시 말하지만, 당신의 예제가 단순하기 때문에 다소 불명확합니다.

+0

이 메소드는'def my_method (self, param) : print param * 2'처럼 정의되고'self.my_method()'에 대한 호출은'self.my_method (self. my_field)'. – morningstar

+0

알겠습니다. 알겠습니다. 리팩토링 도구를 사용하여이 작업을 수행 할 수있었습니다 (** Change Signature ** (https://www.jetbrains.com/help/pycharm/2016.1/change-signature.html)). 매개 변수를 기존의 메소드 및 리팩토링 자의 기존 호출에 포함시켜이를 포함시킵니다. –

+0

그래, 알았어. 기본값에 사용할 식을 변경 서명 대화 상자에 복사 한 다음 해당 식을 새 매개 변수의 이름으로 바꿔야하기 때문에 좀 더 수동입니다. 그러나 노력에 감사드립니다. – morningstar