클래스

JoyJuhee·2022년 10월 20일
0

Python

목록 보기
8/22
post-thumbnail

클래스

1) 클래스와 객체의 개념

  • 클래스 : 객체를 만들기 위한 설계도
  • 객체 : 설계도로부터 만들어낸 제품
    👉 클래스 안에는 속성, 메서드가 포함되어 있다. (모든 메서드의 첫 매개 변수는 self)

2) 클래스 사용하기

  • 호출하기
goblin = Monster() #인스턴스 = 클래스이름()
goblin.say() #인스턴스.메서드()

👉 인스턴스는 클래스와 연관지어 말할때, 객체는 그 자체만 말할때 사용한다.

3) 파이썬에서는 자료형도 클래스이다.

👉 자료형의 함수를 알기 위해서는 변수.dir() 을 해준다.

생성자

1) 속성

class Monster:
	def __init_(self, health, attack, speed): # 인스턴스를 만들때 반드시 호출되는 메서드
    	self.health = health # goblin.health = 800
        self.attack = attack # goblin.attack = 120
        self.speed = speed # goblin.attack = 300

goblin = Monster(800,120,300) #init의 매개변수로 들어간다. 

--> init 메서드는 인스턴스를 만들때 반드시 호출되는 함수이고, Monster(800,120,300)를 작성할 때 인스턴스가 만들어진다.

--> self : 인스턴스 자기 자신을 의미한다.
--> goblin = Monster(800,120,300)를 작성할 때, init 메서드의 self는 goblin 자기 자신을 뜻한다.

2) 메서드 추가하기

class Monster:
	def __init_(self, health, attack, speed): # 인스턴스를 만들때 반드시 호출되는 메서드
    	self.health = health # goblin.health = 800
        self.attack = attack # goblin.attack = 120
        self.speed = speed # goblin.attack = 300
    def decrease_health(self, num):
    	self.health -= num
    def get_health(self):
    	return self.health
  
goblin = Monster(800,120,300)

goblin.decrease_health(100)
print(goblin.get_health())

상속

1) 상속의 개념
: 자식클래스가 부모클래스의 속성과 메서드를 그대로 가지고 오는 것.

  • 언제 사용?
    자식 클래스의 공통된 부분들을 부모 클래스로 만들어준다.
    (몬스터 -> 땅몬스터, 물몬스터, 공중몬스터)
    --> 클래스들에 중복된 코드를 제거하고 유지보수를 편하게 하기 위해서 사용

2) 상속 사용방법

class Monster:
	def __init__(self, name, health, attack):
    	self.name = name
        self.health = health
        self.attack = attack
    def move(self):
    	print("지상에서 이동하기")

class Wolf(Monster): # Monster를 상속받기 때문에 Monster의 속성을 자동으로 쓰게 됨. 
	pass

class Shark(Monster):
	def move(self): # 메서드 오버라이딩
    	print('헤엄치기')

class Dragon(Monster):
	def move(self): # 메서드 오버라이딩
    	print('날기')

1) 메서드 오버라이딩 : 부모 클래스에 있던 메서드를 재정의

오버라이딩, 클래스 변수

import random
# 상속 : 클래스들에 중복된 코드를 제거하고 유지보수를 편하게 하기 위해서 사용

# 클래스 변수 : 인스턴스들이 모두 공유하는 변수 

# 부모 클래스
class Monster:
    max_num = 1000 # 클래스 변수
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack
        Monster.max_num -= 1 # 클래스 변수 
    def move(self):
        print(f"[{self.name}] 지상에서 이동하기")

# 자식 클래스
class Wolf(Monster):
    pass

class Shark(Monster):
    def move(self): # 메서드 오버라이딩
        print(f"[{self.name}] 헤엄치기")

class Dragon(Monster):
    # 생성자 오버라이딩
    def __init__(self, name, health, attack):
        super().__init__(name, health, attack) # 부모 클래스의 init을 불러올 수 있음.
        self.skills = ("불뿜기","꼬리치기", "날개치기")
        
    def move(self) : # 메서드 오버라이딩
        print(f"[{self.name}] 날기")
    
    def skill(self):
        print(f"[{self.name}] 스킬 사용 {self.skills[random.randint(0,2)]}")

wolf = Wolf("울프", 1500, 200)
wolf.move()
print(wolf.max_num)

shark = Shark("샤크", 3000, 400)
shark.move()
print(shark.max_num)

dragon = Dragon("드래곤", 8000, 800)
dragon.move()
dragon.skill()
print(dragon.max_num)

출력결과

is_a VS has_a

1) is_a : 서로 상속을 할 때 가지는 관계
Dragon is a Monster
2) has_a : 상속이 아닌 속한 관계
Player has a Unit

출처 : 패스트캠퍼스 Python & Django로 시작하는 웹 프로그래밍

0개의 댓글