2017-02-22 6 views
3

작성 파이썬 모듈의 속성, 그래서 내가 그랬어 :상수 정수 내가 <a href="https://docs.python.org/3.3/extending/extending.html" rel="nofollow noreferrer">https://docs.python.org/3.3/extending/extending.html</a></p> <p>지금은 그 모듈의 정수 상수를 갖고 싶어에 따라 C에서 파이썬 확장 모듈을 구현 C

module= PyModule_Create(&myModuleDef); 
... 
PyModule_AddIntConstant(module, "VAR1",1); 
PyModule_AddIntConstant(module, "VAR2",2); 
... 
return module; 

이를 공장. 하지만, 파이썬에서 "상수를"수정 내가 __setattr__ 과부하하려고했으나이 기능이 할당에 호출되지 않습니다

import myModule 
myModule.VAR1 = 10 

같은 수 있습니다.

해결책이 있습니까?

답변

6

C (++)에서와 같이 파이썬에서 모듈 수준 "상수"를 정의 할 수 없습니다. 파이썬 방식은 모든 사람들이 책임있는 성인처럼 행동 할 것으로 기대하는 것입니다. 무언가가 모두 밑줄이있는 대문자 (예 : PEP 8) 인 경우이를 변경하면 안됩니다.

+0

C는 임의 유형의 기호 상수를 지원하지 않습니다. C++이 아닙니다. 열거 형 상수 만 가능하지만 항상 상수입니다. 그리고 파이썬에서는 객체의 세터를 변경할 수 있습니다. 그러나 일반적으로 사람은 노력을 피하고 국제 대회에 의존합니다. – Olaf

+0

@Olaf - 참이지만이 경우 OP는 파이썬에서 전혀 불가능한 리바 인딩을 방지하려고합니다. 그리고 파이썬 정수는 모두 불변 객체이기 때문에'__setattr__'은 중요하지 않습니다. – StoryTeller

+1

예, 모든 정상적인 오버 헤드가있는 "정상적인"클래스가 필요합니다. 그래서 대회에 의존하는 것에 동의합니다 (내 의견에 분명하지 않은 경우). – Olaf