2011-10-01 3 views
5

의 개념을 this article에서 가져올 수 있습니까?함수 또는 클래스 스텁하기

class Loaf: 
    pass 

이 클래스는 어떤 메소드 나 속성을 정의하지만 패스를 사용할 수 있도록 구문, 정의에 뭔가있을 필요하지 않습니다. 이것은 단순히 "움직여야하며, 여기서는 볼 수있는 것"을 의미하는 파이썬 예약어입니다. 그것은 아무것도하지 않는 진술, 그리고 당신은 기능이나 classes.`을 스텁 때 그것이 좋은 자리입니다

pass 당신에게

답변

14

이 서면 클래스 또는 함수하지만 아직 구현하지를 말합니다 함수 나 클래스

을 스텁. 예를 들어 클래스를 만들 수 있습니다.

class Foo(object): 
    def bar(self): 
     pass 

    def tank(self): 
     pass 

아직 구현하지 않았기 때문에 함수를 스텁했습니다. 그러나 나는 이것이 위대한 계획이라고 생각하지 않는다. 대신, 당신이해야 :

class Foo(object): 
    def bar(self): 
     raise NotImplementedError 

    def tank(self): 
     raise NotImplementedError 

그런 식으로 그것을 구현하기 전에 실수로 메서드를 호출 할 경우, 당신은 아무 일이없는 다음 오류가 발생합니다.

+0

그래서 스텁은 내가 뭔가를 구현해야한다는 것을 상기시키는 것일뿐입니다. – xralf

+0

@xralf, 꽤 많이. –

+0

@xralf 항상 그렇지는 않습니다. 때때로 no-op 함수를 원한다. 빈 블록을 선언하는 유일한 방법은 pass ("C++"와 같은 언어에서 빈 중괄호와 같은 종류)를 사용하는 것이다. – awesomo

1

이유 감사 파이썬은 들여 쓰기 의존한다는 것입니다 및 기대 하나 more 콜론 뒤에 들여 쓰기 된 문 (예 : class 또는 function 이후).

스텁 아웃 된 함수 나 클래스의 경우와 같이 명령문이없는 경우에도 적어도 하나의 들여 쓰기 문이 있어야하므로 특수 pass 문을 자리 표시 자로 사용할 수 있습니다. 당신은 쉽게 같은 영향을 미치지 않고 뭔가를 넣어 수 :

class Loaf: 
    True 

하고도 잘 (하지만 내 생각에 pass를 사용하는 것보다 명확하지)입니다.

1

Stubbing은 소프트웨어 개발 기술입니다. UML 다이어그램을 그리는 등 모듈이나 클래스를 계획 한 후에는이를 구현하기 시작합니다.

많은 메소드와 클래스를 구현해야하므로 스텁으로 시작해야합니다. 이것은 단순히 함수 정의를 작성하고 나중에 실제 코드를 남겨 두는 것을 의미합니다. 장점은 메서드를 잊지 않고 코드에서 보는 동안 계속 디자인에 대해 생각할 수 있다는 것입니다.

4

'스텁'은 아무 것도하지 않지만 해당 클래스 나 함수가 정의 될 수 있도록 자리 표시 자 클래스 또는 함수입니다. 이미 구현을 작성하지는 않았지만 컬렉션의 특정 부분 (컬렉션에 넣거나 콜백으로 전달하는 등)을 이미 사용할 수 있다는 아이디어가 있습니다.

  • 팀 개발 :

    스텁을 포함, 다수의 시나리오에 유용한 기술이다 종종, 리드 프로그래머는 메소드 스텁과 방법이 무엇을해야하는지 설명하는 주석이 떠나 가득 수준의 골격을 제공 할 것입니다 다른 팀원들에게 실제 구현.

  • 반복 개발 : 스텁은 부분 구현으로 시작할 수 있습니다. 코드는 아직 완성되지는 않지만 여전히 컴파일됩니다. 세부 정보는 나중에 반복되는 과정에서 채워집니다.
  • 데모 목적 : 데모 목적을 위해 메서드 나 클래스의 내용이 흥미롭지 않은 경우에는 종종 생략되어 스텁 만 남습니다.
+1

귀하의 답변은 그것이 완전하고 재미있게 받아 들여지는 것에 속합니다. – xralf