반응형
- 먼저, 클래스의 개념, 객체의 무결성 보장에 대해 알고 있어야 함. 이 글에서는 파이썬에서 클래스를 선언하고 사용하는 방법만 간단하게 설명함.
클래스 선언
class Pokemon:
pass
a = Pokemon()
print(type(a))
# <class '__main__.Pokemon'>
- pass 는 아무것도 수행하지 않는 키워드. 임시 코드 작성시 많이 사용한다.
클래스 객체 변수 할당
class Pokemon:
type = {'first': '', 'second':''}
def __settype__(self, key, value):
self.type[key] = value
pikachu = Pokemon()
pikachu.__settype__('first', '전기')
print('pikachu : ', pikachu.type)
# pikachu : {'first': '전기', 'second': ''}
파이썬에서는 관례적으로 클래스 메소드 첫번째 매개변수로 self 라는 이름으로 클래스 객체 자기자신을 가리키는 값을 명시적으로 구현한다.
(self 말고 다른 이름으로 선언해도 상관없지만, 일반적으로 self 를 사용한다.)클래스 객체 변수의 getter, setter 함수명은 위와 같이 _ 두개를 앞뒤로 붙이는 것 같다.
클래스 상속
class 클래스명(상속받을부모클래스명):
class Bird:
def createEggs(self):
print('egg')
class Penguin(Bird):
def swim(self):
print('i can swiiiim')
king = Penguin()
king.createEggs()
king.swim()
# egg
# i can swiiiim
위처럼 Penguin 클래스 객체인 king 이 상속받은 부모클래스의 createEggs 메소드를 사용하는 것을 볼 수 있다.
메소드 오버라이딩
상속받은 부모클래스의 메소드를 오버라이딩 하려면 자식클래스에서 해당 메소드명을 다시 선언하면 된다.
class Bird:
def createEggs(self):
print('egg')
def fly(self):
print('i can fly')
class Penguin(Bird):
def swim(self):
print('i can swiiiim')
def fly(self):
print('i can\'t fly')
king = Penguin()
king.createEggs()
king.swim()
king.fly()
# egg
# i can swiiiim
# i can't fly
클래스 변수와 객체 변수
아래 예제를 보자.
class Bird:
imbird = 'im bird'
def createEggs(self):
print('egg')
def fly(self):
print('i can fly')
class Penguin(Bird):
def swim(self):
print('i can swiiiim')
def fly(self):
print('i can\'t fly')
king = Penguin()
dino = Penguin()
print(king.imbird) # im bird
print(dino.imbird) # im bird
Penguin.imbird = 'im not bird'
print(king.imbird) # im not bird
print(dino.imbird) # im not bird
king.imbird = 'im bird'
dino.imbird = 'im not bird'
print(king.imbird) # im bird
print(dino.imbird) # im not bird
클래스 변수는 모든 클래스 객체가 공유하며,
객체변수명은 클래스 변수명과 동일할 수 있다.
위 코드중 아래 부분은 각각의 객체에 imbird 라는 변수를 새롭게 선언한 것이며
king.imbird = 'im bird'
dino.imbird = 'im not bird'
실제로 dino 객체의 부모클래스변수를 가져와보면 알 수 있다.
print(Bird.imbird) # im bird
print(Penguin.imbird) # im not bird
'Dev > Python' 카테고리의 다른 글
python virtualenv - 폐쇄망(오프라인)에서 설치하기 (0) | 2023.09.20 |
---|---|
python - self 매개변수에 대해 (0) | 2023.09.18 |
global, nonlocal ( 전역, 지역 변수 ) (0) | 2023.09.13 |
[python, venv, virtualenv] 파이썬 버전관리 - virtualenv (0) | 2023.09.12 |
python 함수 (0) | 2023.09.12 |