본문 바로가기

Python/Python 기초

함수, 메소드, 생성자 함수, 모듈 내 함수에 대한 주의 사항과 차이점 -명명 규칙 (Naming Rule)-

여기서는 꼭 지키지는 않아도 되지만 암묵적으로


내려온 전통적인 파이썬의 명명 규칙에 대해서 알아보겠다.



함수와 메소드는 거의 동일하다.


둘 다 호출을 당해서 가지고 있는 코드를 실행한다.


둘의 차이점은 메소드는 객체에 연관되어 있다는 점이다.


보통 메소드는 특정 객체에 대한 것을 바꾸는 일을 한다(메소드에 인자로 관련 객체를 넘겨준다).


다음은 foo()라는 이름의 함수를 호출하는 방법이다.


foo()


다음은 foo()라는 이름의 메소드를 호출하는 방식인데


foo() 메소드는 duckie라는 변수에 저장된 객체에 연관되어 있다.


duckie.foo()


모듈 안에서 함수를 호출하는 것이나 메소드 호출이나 비슷해 보인다.


차이점은 처음에 나오는 것이 모듈의 이름인지 아니면 객체를 포함하는 변수의 이름인지에 있다.


예를 들어 sys.exit()은 모듈 안에서 함수를 호출하는 것인데


프로그램의 맨 앞부분에서 import sys로 sys 모듈을 가져왔기 때문이다.


생성자 함수(constructor function)는 함수 호출과 똑같이 생겼지만


새로운 객체를 반환한다는 점에서 차이가 있다.


소스 코드 안에서 보면 함수 호출과 생성자 함수는 동일하게 생겼다.


생성자 함수(줄여서 생성자)는 새로운 객체를 반환하는 함수의 이름이다.


생성자 함수는 대부분 영어 대문자로 시작한다.


따라서 함수를 작성할 때는 생성자 함수와 구분되도록 소문자로 시작하는 것이 좋다.


예를 들어 pygame.Rect()와 pygame.Surface() 모두 pygame 모듈 안에 들어 있는


생성자 함수이며, 새로운 Rect 객체와 Surface 객체를 반환한다.


다음은 함수 호출, 메소드 호출, 모듈 안의 함수 호출에 대한 예제이다.


import whammy
fizzy()
egg = Wombat()
egg.bluhbluh()
whammy.spam()


위의 이름들은 진짜 이름은 아니고 적당히 만든 이름이므로 착각하지 말 것,


whammy는 모듈 이름이며 코드 첫 번째에 import와 함께 나오므로 쉽게 알 수 있을 것이다.


fizzy는 앞뒤에 아무것도 나오지 않으므로 그냥 함수 호출이다.


Wombat() 역시 함수 호출이다.


이 경우는 객체를 반환하는 생성자 함수이다.


(물론 대문자로 시작한다고 무조건 다 생성자 함수인 것은 아니다)


객체는 egg 변수에 저장된다.


egg.bluhbluh()는 메소드 호출이며 bluhbluh는 객체가 저장된 변수와 관련되어 있다.


whammy.spam()은 함수 호출이지 메소드 호출이 아니다.


왜냐하면 whammy가 앞부분에서 import한 모듈 이름이기 때문이다.



'Python > Python 기초' 카테고리의 다른 글

파이썬 코딩 스타일 가이드  (0) 2015.02.05
파이썬 버전  (0) 2015.02.05
구문 (Statement)  (0) 2014.12.07
파이썬 버전 2와 버전 3의 차이점  (3) 2014.12.06
유용한 파이썬 모듈  (0) 2014.11.04