2012-09-01 4 views
1

일부 코드를 리팩토링하기 위해 eric4 및 로프 플러그인을 사용하고 있습니다. 서명이 *args**kwargs 구문을 사용하는 많은 메소드가 있습니다. 이 서명을 변경하려면이 매개 변수를 제거하고 싶습니다.로프를 사용하여 메소드 서명에서 * args 및 ** kwargs를 제거하십시오.

Refactoring>Refactoring>Change Method Signature을 사용해 보았지만 *args**kwargs 매개 변수는 제거되지 않았습니다.

로프 자체의 제한 사항인지 또는이 기능을 지원하지 않는 eric 플러그인인지 궁금합니다.

답변

5

*args**kwargs을 왜 삭제 하시겠습니까? 리팩터링 라이브러리는 이러한 함수를 리팩터링하기 위해 올바른 매개 변수를 파악하기 위해 상당한 수준의 내성 검사를 수행해야합니다. 예를 들어

, 다음과 같은 기능을 리팩토링 얼마나 :

def f(a, b, c=3, d=4): 
    print a, b, c, d 

그것은 이미 실제이 작업을 수행하는 코드 분석이 꽤 필요합니다

def f(*args, **kwargs): 
    a = args[0] 
    b = args[1] 
    c = kwargs.get('c', 3) 
    d = kwargs.get('d', 4) 
    print a, b, c, d 

당신은으로 바꿀 수있다 기능은 더 어렵습니다. 위치 및 키워드 인수의 수가 다를 수 있습니다 (예 : 함수가 args을 반복 할 수 있음). 올바른 함수 인수를 판별하기 어렵습니다.

진짜 필요가 없다면, 나는 *args**kwargs을 유지하고 다른 리펙토링 노력에 집중할 것입니다.

+1

더 나쁘면 인수가 다른 함수에도 전달 될 수 있으므로 호출 트리에서 무엇이 들어 있는지 파악하는 분석이 매우 깊어 야합니다. –

+0

좋습니다, 로프의 한계입니다. 언제나'* args'와'** kwargs'는 현재 사용되지 않았습니다. 이 메서드는 일부 논리를 구현하는 반 추상 클래스의 일부이기 때문에 구체적인 단계를 구현하지 않았으므로 여기에 넣었으므로 하위 클래스가 옵션을 전달할 수 있도록 지정했습니다. 이제는 클래스의 생성자에 옵션을 전달하는 등의 작업을 수행하는 훨씬 깨끗한 방법이 있다는 것을 이해했습니다. 따라서이를 제거하고 싶습니다. 신경 쓰지 마라, 나는 그들을 손으로 제거 할 것이다. 어쨌든 설명해 주셔서 감사합니다. – Bakuriu