인수(argument): 함수를 호출할 때 전달되는 필요한 정보
매개변수(parameter): 함수 헤더에 정의된, 함수 호출 시 인수가 전달되는 곳
디폴트 인수(default argument): 함수 호출 시 인수가 생략되면 기본 값으로 사용되는 인수
키워드 인수(keyword argument): 매개변수 이름에 직접 값을 지정하여 호출하는 인수.
- 내장 범위(built-in scope) : 언어의 일부로 정의된 변수와 리터럴들. 프로그램의 어디에서나 쓸 수 있다.
- 전역 범위(global scope) : 소스 파일 맨 위(함수나 클래스 밖)에서 생성된 변수. 프로그램 어디에서나 쓸 수 있다.
- 지역 범위(local scope) : 함수나 클래스의 멤버함수(메소드) 안에서 생성된 변수. 그 안에서만 사용. ex) 함수의 매개변수
- 인스턴스 범위(instance scope) : 클래스의 데이터 멤버로 생성된 변수들. 해당 클래스 내 다른 함수들에서 쓸 수 있다.
from module_A import *
→ 모듈 A의 모든 식별자를 사용
from module_B import a, b
→ 모듈 B의 a, b 식별자를 사용
많은 모듈을 사용할 경우 식별자가 중복될 수 있으므로 식별자는 가급적 선택적으로 사용하자.
클래스를 실체화(instance)한 것이 객체(object)이다.
클래스의 속성(attribute)은 메소드(method)에 의해 정의된다
* 메소드: 클래스 안의 함수를 지칭
__init__
메소드(생성자)
- 클래스가 실체화될 때 자동으로 호출된다.
- 객체에서 사용할 데이터를 정의하고 초기화하는 역할.
- 모든 메소드는 첫 번째 인수(argument)로 항상 self를 받아주며, 여기서의 self는 실체화된 객체(object)를 가리킨다.
class Car: def __init__(self, color, speed=0): #생성자 메소드 self.color = color #데이터 멤버 color 정의 및 초기화 self.speed = speed #데이터 멤버 speed 정의 및 초기화
- self가 붙지 않은 모든 변수들은 멤버 변수가 아닌 지역변수 혹은 전역변수이다.
- 객체 생성하기
car1 = Car('black', 0) # 검정색, 속도 0 car2 = Car('red', 120) # 빨간색, 속도 120 car3 = Car('green') # 초록색, 속도 0(디폴트 인수)
- 객체에 대한 연산
class Car: # ... def speedUp(self) : self.speed += 10 def speedDown(self) : self.speed -= 10
car2.speedDown() #car2 속도 10 감속 car3.speedUp() #car3 속도 10 가속
- 사용자가 의한 클래스의 객체들에게 표준 연산자를 적용 가능하다
def isEqual(self, carB): if self.color == carB.color: return True else: return False
car4 = Car('red') print(car1.isEqual(car4)) # False print(car2.isEqual(car4)) # True
- 자동차 클래스 내에서
__eq__
라는 메소드를 정의하면 ==연산자로 바로 비교 가능함def __eq__(self, carB): return self.color == carB.color
- Car 객체 문자열(str)로 변환하기 :
__str__
메소드def __str__(self): return "color = %s, speed = %d" % (self.color, self.speed) print("[car3]", car3) # [car3] color = green, speed = 0
기존에 정의된 클래스로부터 멤버를 추가해 새로운 클래스를 간편하게 만드는 것을 지칭
기본(base) 클래스 : 부모 클래스
파생(derived) 클래스 : 자식 클래스
- 클래스의 상속
- Car 클래스를 상속하는 SuperCar 클래스
- color와 speed는 다시 정의하지 않음 (self.color, self.speed는 부모 클래스의 생성자 호출로 해결)
- 자식 클래스에서 부모를 부르는 함수 super()
class SuperCar(Car): #Car 상속 def __init__(self, color, speed=0, Turbo=True): super().__init__(color, speed) #부모(Car) 클래스의 생성자 호출 self.Turbo = Turbo #터보모드 변수 생성 및 초기화
- 자식 클래스 객체 생성하기
s1 = SuperCar("Gold", 0, True) #골드, 속도 0, 터보모드 on s2 = SuperCar("White", 0, False) #흰색, 속도 0, 터보모드 off
- 메소드의 재정의(overriding)
def setTurbo(self, Turbo=True): #터보모드를 on/off하는 메소드 self.Turbo= Turbo
- 터보 모드가 on이면 급속히 가속(+50)한다고 가정하면, 부모의 speedUp()함수는 터보 모드가 꺼진 경우로 볼 수 있다.
def speedUp(self): #SuperCar의 SpeedUp 메소드 재정의 if self.Turbo: self.speed += 50 else: super().speedUp() #일반 자동차의 가속 메소드
- speedUp() 함수는 부모 클래스에 이미 정의되어 있지만, 자식에서 내용을 변경해 다시 재정의(overriding)하였다.