관리 메뉴

엘리

파이썬_클래스,메소드_나도코딩 본문

프로그래밍 공부 일지/파이썬 공부

파이썬_클래스,메소드_나도코딩

엘리허 2021. 7. 29. 06:45

후.. 오늘 내용 어렵네?

그런데.. 재밌땅 ><

#나도코딩 님 넘 잘가르쳐 주신당..

 

#클래스 #붕어빵틀이라 생각하면 좋다 하나의 틀이다! 연관있는 변수와 함수의 집합이다!

 

#마린: 공격 유닌, 군인, 총을 쓸 수 있음

name = "마린"

hp = 40 #유닛의 체력

damage = 5 #공격력

 

print("{} 유닛이 생성되었습니다".format(name))

print("체력 {0}, 공격력 {1}\n".format(hp,damage))

 

#탱크

tank_name="탱크"

tank_hp=150

tank_damage=35

 

print("{} 유닛이 생성되었습니다".format(tank_name))

print("체력 {0}, 공격력 {1}\n".format(tank_hp,tank_damage))



def attack(name,location,damage):

print("{0}:{1} 방향으로 적군을 공격 합니다. [공격력{2}]".format(name,location,damage))

 

attack(name,"1시",damage)

attack(tank_name,"1시",tank_damage)

 

 

class Unit:

def __init__(self,name,hp,damage):

self.name=name

self.hp=hp

self.damage=damage

print("{0} 유닛이 생성되었습니다.".format(self.name))

print("체력 {0},공격력{1}".format(self.hp,self.damage))

#같은 클래스로 다른 유닛을 만들수 있다 :) 우왕...ㅎㅎ 넘 좋다

marine1=Unit("마린", 40,5) #객체!

marine2=Unit("마린", 40,5) #클래스로부터 만들어지는 것 유닛클래스의 인스턴스

tank=Unit("마린", 410,5)

 

#__init___ : 생성자 객체가 만들어 질때 자동으로 호출되는 것!

 

#멤버 변수 : 클래스 내에서 정의된 변수

#레이스: 공중유닛, 비행기, 클로킹(상대방에게 보이지 않음)

wraith1=Unit("레이스",80,5)

print("유닛 이름: {0}, 공격력 : {1}".format(wraith1.name,wraith1.damage)) #점으로 멤버변수에 접근 가능 함

 

 

#마인드 컨트롤: 상대방 유닛을 내 것으로 만드는 것(빼앗음)

wraith2=Unit("레이스",80,5)

wraith2.clocking=True

if wraith2.clocking ==True:

print("{0} 는 현재 클로킹 상태 입니다.".format(wraith2.name)) #클로킹 변수는 없다 (외부에서 추가로 할당)

 

#객체에 추가로 변수를 외부에서 만들어서 쓸수 있다. #확장한 객체에서만 적용된다! #다시한번 봐야 할꺼 같다

#메소드

#공격유닛 #클래스 내에서 메소드 앞에는 self 를 적어준다. 자기자신의 변수에 접근 가능함

class Attackunit:

def __init__(self,name,hp,damage):

self.name=name #전달받은 인자를 쓴다 (셀프가 없다면)

self.hp=hp

self.damage=damage

def attack(self,location):

print("{0}:{1}방향으로 적군을 공격 합니다.공격력{2} ".format(self.name,location,self.damage))

def damaged(self,damage):

print("{0}:{1} 데미지를 입었습니다.".format(self.name,damage))

self.hp-=damage

print("{0}: 현재 체력은 {1} 입니다".format(self.name,self.hp))

if self.hp<=0:

print("{0}: 파괴되었습니다".format(self.name))

 

#파이어벳: 공격 유닛, 화염 방사기

 

firebat1=Attackunit("파이어벳",50,16)

firebat1.attack("5시")

#공격 2번 받는다고 가정

firebat1.damaged(25)

firebat1.damaged(25)

 

 

메소드 부분이 이해가 되지 않아서 다시한번 찾아 봤다

추가 설명.  좀 더 자주 봐야 할 주제 인거 같다 *_* 개인적으로 메소드가 함수랑 같은 의미 인거 같은데,

어떤점이 다른지 정확히 파악이 안된다 일 마치고 한번 찾아봐야겠다!

#메소드를 어택과 데미지를 만들어서 정의 한거임 ㅎㅎㅎ 음.. 어렵군

#함수와 메소드는 이름뒤에 항상 소괄호()가 붙고

#함수는 반복되는 코드,기능,행위들을 쉽게 관리하기 위해 선언하여 사용한다.

#메소드를 사용하는 이유

#반복되는 기능, 코드를 쉽게 관리하고, 재사용하기 위함 그리고 소스코드를 간결화 하고 가독성을 위해 사용됨

#메소드를 사용해야 나중에 분업이 가능하다.