2010-08-03 5 views
3

저는 기계 공학 학생이며 PyODE를 사용하여 물리적 시뮬레이션을 구축하고 있습니다. 내가 가진, 그래서 대신에 하나 개의 파일에서 모든 것을 실행전역 매개 변수에 대한 파이썬 모듈 -이 좋은 연습입니까?

, 나는 모듈에 물건을 정리하고 싶었 :

  • main.py를
  • callback.py
  • helper.py

helper.py가 main에서 변수를 참조 할 필요가 있다는 것을 깨달았을 때 문제가 발생했습니다. 그러나 main은 도우미를 가져 오는 것입니다!

그래서 제 솔루션은 외부 파일 (시간과 무작위와 같은) 만 가져오고 변수를 포함하는 네 번째 파일을 만드는 것이 었습니다.

그래서 지금이 :

  • main.py
  • callback.py
  • helper.py
  • parameters.py

모든 스크립트가 있습니다 import parameters 및 사용 : parameters.foo 또는 parameters.bar.

이것은 허용 가능한 관행입니까, 아니면 파이썬 프로그래머가 토할 수있는 확실한 방법입니까? :)

이 말이 맞는지 또는 더 현명한 방법이 있는지 알려주십시오.

감사합니다, -Leav

답변

1

피라미드처럼 보이도록 코드를 디자인하려고합니다. 내가 발견 한 바로는 더 명확한 코드로 이어집니다.

+0

Paul, 피라미드에서 위의 모듈 (또는 그에 인접한 모듈)에 의존하지 않도록 설계 하시겠습니까? 내 코드를 그렇게 재 설계 할 수 있다면 이는 의미가 있으며 내 문제를 해결할 것입니다. 경험에 따르면, 대다수의 프로젝트를 이렇게 설계 할 수 있습니까? – Leav

+0

@Leav : 예, 저도 그렇게합니다. 나는 내 프로젝트가 그 패션을 향해 디자인 될 수 있다는 것을 알고있다. 나는 대다수의 프로젝트를 일반화하기까지는 가지 않을 것입니다. –

+0

고마워,이 일이 내가 끝내고 일하는 것 같다! – Leav

2

음, 난 이런 경우는 sence가되지 않습니다 생각 : 당신의 도우미 기능이 "주요 독립해야한다"helper.py 메인에서 변수를 참조하는 데 필요한 것을 깨달았다 " 코드 ", 그렇지 않으면 그 생각 못생긴 더 디자인 실패 같아요.

0

좋은 연습인지는 모르겠지만 수업을 사용하는 경우 문제가 발생하는 이유는 알 수 없습니다. 또는 나는 무엇인가 놓치고 있냐?

각 스크립트를 독립적으로 실행할 수 있기를 원한다면 스크립트의 끝에서 다음과 같이 할 수 있습니다.

if __name__ == '__main__': 
    # Code that you want to run when the script is executed. 
    # This block will not be executed if the script is imported. 

파이썬의 클래스에 대한 자세한 내용은 here을 참조하십시오.

+0

클래스와 모듈의 구분을 잘 모르겠다면 올바른 방향으로 나를 가리켜 주시겠습니까? 이 컨텍스트에서 클래스를 어떻게 사용합니까? – Leav

+0

먼저 추상화를 해보겠습니다 : * 객체 지향 * 프로그래밍의 개념. – Santa

+0

기본적으로 OOP의 개념을 이해한다고 생각하지만 구현 방법에 대한 경험이 부족합니다. 당신은 위의 간단한 경우에 속하는 간단한 예제를 줄만큼 충분히 친절합니까? – Leav

3

상수, 구성에 대한 별도의 '글로벌'파일이 필요하며 모든 곳에서 필요한 것을 포함합니다. 그러나 실제 가변 변수를 포함 할 때 그다지 좋은 생각은 아닙니다. 대신 파일이 함수 반환 값 및 인수와 통신하도록하는 것이 좋습니다. 이렇게하면 캡슐화가 촉진되고 코드가 엉망이되는 혼란을 피할 수 있습니다.

파일 간 통신이 명확하여 파일을 쉽게 이해할 수 있으며 더 명확하게 진행됩니다. 변수를 사용할 때 어디에서 왔는지 아무도 모를 때 상황이 꽤 짜증을 낼 수 있습니다.:)

0

원하는 것은 구성 요소 간의 다양한 종속성을 구성하는 것입니다. 이러한 종속성을 객체 지향 방식으로 표현하는 것이 더 나을 것입니다. 모듈 및 전역 상태를 가져 와서 수행하는 대신 이러한 상태를 개체 인으로 인코딩하고 주위를 전달합니다.

개체와 클래스 및 파이썬으로 작성하는 방법을 읽어보십시오. 나는 아마 거기에서 시작할 것입니다.

관련 문제