본문 바로가기
Dev/Python

클래스

by 석맨.class 2023. 9. 14.
반응형
  • 먼저, 클래스의 개념, 객체의 무결성 보장에 대해 알고 있어야 함. 이 글에서는 파이썬에서 클래스를 선언하고 사용하는 방법만 간단하게 설명함.

클래스 선언

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