2014-03-06 3 views
1

함수가 spamham이고 모듈이 eggsfoo 인 모듈이 있다고 가정합니다.Python에서 그룹화 관련 함수

def spam(): 
    eggs() 
    foo() 
    ... 

def ham(): 
    eggs() 
    foo() 
    ... 

이제 eggsfoospamham에 의해 사용되며, 그래서 모듈 수준에서 노출하는 이해가되지 않습니다. _eggs_foo으로 이름을 바꿔 내부 용으로 사용할 수 있음을 나타내지 만 실제로는 spam, ham, eggsfoo 사이의 관계를 설정하지는 않습니다.

class SpamHam: 

    @staticmethod 
    def _eggs(): 
     ... 

    @staticmethod 
    def _foo(): 
     ... 

    @staticmethod 
    def spam(): 
     ...   

    @staticmethod 
    def ham(): 
     ... 

을하지만 SpamHam의 인스턴스 만 정적 메서드를 호출을 사용하지 않는 사용자를 기대하기 때문에이 skethy 보인다

그래서,이 같은 이러한 기능을 유지하기 위해 컨테이너 클래스를 만들 수 있습니다. 게다가 원하는 클래스가있을 때 클래스를 사용하는 것이 옳은 것처럼 보이지 않습니다. 그 방법 사이에 어떤 관계를 설정하는 것입니다.

내가 spamham라는 별도의 모듈을 만들고 해당로이 네 가지 기능을 추가하는 듯했으나 spamham 정말 그들은 이미 모듈에 '소속'할 수 있었다.

그래서를 무슨 일이 같은 설정하는 올바른 방법입니다 관계를 파이썬으로?

답변

4

일반적으로 이러한 것들을 함수들 사이의 특정 관계로 생각하지 말 것을 권합니다. 함수는이어야하며 자 급식 코드 단위 이어야합니다. 저의 중심 논문은 eggsspamham에 속하는 것으로 생각해서는 안된다는 것입니다. eggsspam 또는 ham 또는 bacon 또는 toast에 의해 호출 되든 상관하지 않아야합니다. 중요한 것은 eggs에 가능한 한 명확한 이름이 있습니다. 의 기능은 무엇입니까 입니다.

외부에서 사람들에게 액세스 권한을 부여 할 기능을 알아내는 것이 트릭입니다 ... 이미 언급 한대로 eggs (공개) 또는 _eggs (구현 정보는 예고없이 변경 될 수 있음) 여부가 결정됩니다. 에.

1이 :)

+1

또한 ... 기능은 다른 기능
2 함수의 기능에 대해 바람직하게는 올바른 아이디어를 호출 할 수 있다는 말은 아니다 당신의 모듈에서'__all__'을 사용하는 것을 고려하십시오. – kindall

+2

@kindall - 물론입니다. 거기에 아무 해가 없습니다. 나는 그것이 "다른 한편으로는, 이것은 공적인 이름입니다"라는 또 다른 계층을 제공한다고 생각합니다. 그러나 개인적으로, 나는 결코'__all__'을위한 많은 사용을 발견하지 못했습니다. 'blah import * '에서 사람들은 코드에서 나쁜 일이 발생하더라도 그 값을받을 자격이 있습니다 ;-) – mgilson

+1

'help (modulename)'은'__all__'을 존중합니다. 제 의견으로는 매우 유용합니다. – kindall