본문 바로가기

프로그래밍언어/Python

ch05. 파이썬 날개달기 (클래스)

반응형

1. 클래스

 

■ 클래스와 객체

  - 클래스 (class): 특정한 것을 만들기 위한 설계 도면

  - 객체 (object): 클래스를 통해서 만들어진 것

  - 클래스를 통해서 만들어진 객체들 간에 서로 전혀 영향을 주지는 않는다.

# Cookie라는 클래스 생성
class Cookie:
	pass

# Cookie 클래스를 통해서 a, b 객체 생성
a = Cookie()
b = Cookie()

  - 인스턴스: 클래스를 통해서 만들어진 객체를 뜻하는 말로 위의 예시에서 a는 객체이자 Cookie의 인스턴스이다.

 

■ 클래스 생성

  - 클래스 구조

class ClassEx:
	# self는 해당 함수를 호출한 객체가 전달된다.
	def func(self, a, b):
		self.a = a
        self.b = b
'''
self는 객체 자신을 의미하기 때문에
self.a와 self.b는 해당 객체에 a와 b라는 객체를 생성하도록 한다.
'''

a = ClassEx()
a.func(1, 2)	# 각각 1과 2라는 값을 가지는 a와 b 객체를 생성한다.

print(a.a)	# 1
print(a.b)	# 2

 

■ 생성자 (Constructor)

  - __init__: 파이썬 메서드 이름으로 __init__을 사용하면 해당 메서드는 생성자가 된다.

class Class_Ex:
	# 해당 클래스의 생성자 - a, b라는 객체를 생성하고 0으로 초기화한다.
 	def __init__(self):
    	self.a = 0
        self.b = 0

 

■ 클래스의 상속 (inheritance)

  - 다른 클래스의 기능을 물려받을 수 있도록 하는것

  - 기존 클래스의 기능을 변경하지 않고 기능을 추가하거나 변경하려하는 경우에 사용한다.

# class {클래스 이름}({상속하려는 클래스}):
class Class_Child(Class_Parent):
	...

 

■ 메서드 오버라이딩 (overriding)

  - 부모 클래스에 있는 메서드와 동일한 이름으로 자식 클래스에서 메서드를 생성하여 기능을 덮어쓰기 하는 것

  - 오버라이딩 하는 경우 해당 메서드의 이름으로 호출하는 경우 부모가 아닌 자식 클래스의 메서드가 실행된다.

■ 클래스 변수

  - 각 객체가 아닌 클래스에 선언된 변수로 해당 클래스로 생성된 객체들은 해당 변수를 공유하게 된다.

  - 클래스 변수의 값이 변경되면 모든 객체가 영향을 받게 된다.

class Class_Ex:
	var = 'test'
    
a = Class_Ex()
b = Class_Ex()

print(a.var)	# 'test'
print(b.var)	# 'test'

Class_Ex.var = 'changed'

print(a.var)	# 'changed'
print(b.var)	# 'changed'

# 클래스 내부의 var와 객체들의 var 모두 같은 주소값을 가지게된다.
print(id(Class_Ex.var) == id(a.var) and id(a.var) == id(b.var))	# True
반응형