2010-08-07 3 views
1

인스턴스 속성을 참조 할 때 파이썬이 명시적인 self 한정자를 필요로하는 이유를 알고 있습니다.자기 한정어를 잊어 버림 :이 실수를 어떻게 잡지 는가?

그러나 저는 C++에서 필요하지 않았기 때문에 종종 잊어 버렸습니다.

이 방법으로 소개하는 버그는 때로는 잡기가 매우 어렵습니다. 예를 들어, 내가

if x is not None: 
    f() 

대신

if self.x is not None: 
    f() 

한다고 가정 속성 x의 너무 f()이 거의라고하지, 보통 None입니다 쓰기 가정합니다. 그리고 f()이 미묘한 부작용 (예 : 숫자 값 변경 또는 캐시 지우기 등) 만 발생한다고 가정합니다. 미친 양의 단위 테스트가 없으면이 실수는 오랫동안 눈에 띄지 않을 것입니다.

누구든지이 유형의 버그를 잡거나 피할 수있는 코딩 기술이나 IDE 기능을 알고 있는지 궁금합니다.

+1

변수 이름을'x'로 지정하지 마십시오. –

+0

@Hamish, 휴식을주십시오, 그냥 샘플 코드입니다. –

답변

5

인스턴스의 이름을 전역/지역 속성과 동일하게 지정하지 마십시오.

동일한 이름의 글로벌/로컬이없는 경우 self.foo에 액세스하려고 시도 할 때 global "foo" is not defined 오류가 발생하지만 self.은 잊어 버립니다.

결과 : 설명적인 이름을 지정하십시오. 모든 것을 이름 짓지는 마십시오. x - 속성과 동일한 이름의 변수를 가질 확률이 낮을뿐만 아니라 코드를 읽기 쉽게 만듭니다.

+0

아, 완벽 해. 이미 말했듯이 모든 것을하고 있습니다. 글로벌 변수가 정의되어 있지 않다는 사실을 알지 못했습니다. :) 난 그냥 할당을 시도 것을 추가해야 X = '뭔가' 과도 컴파일시에 붙 잡혔다 : AttributeError : '파서'개체가 어떤 속성 'x'를 그래서 모든 것이 괜찮이 없습니다 . – max

관련 문제