34. 클래스

Joy·2020년 4월 1일
0

클래스 사용

클래스: 객체를 표현하기 위한 문법(프로그래밍으로 객체 만들때 사용)
객체: 특정한 개념이나 모양으로 존재하는 것

객체지향 프로그래밍: 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결

파이썬에서 숫자, 문자, 리스트 등은 객체

클래스, 메서드 만들기

클래스 생성

class 클래스이름:
def 메서드(self):
(들여쓰기) 코드

! 메서드의 첫 번째 매개변수는 반드시 self를 지정

클래스 사용

인스턴스 = 클래스()

메서드 호출

인스턴스.메서드()

빈 클래스

class Person:
pass

>>> class Person:
...     def greeting(self):
...         print('Hello')
...
>>> james = Person()
>>> james.greeting()
Hello

객체만 지칭할 때는 그냥 객체(object)
클래스와 연관지어서 말할 때는 인스턴스(instance)

! 메서드 안에서 메서드 호출 :

self.메서드()
self 없으면 클래스 바깥 함수 호출한다고 여김.

class Person:
    def greeting(self):
        print('Hello')
 
    def hello(self):
        self.greeting()    # self.메서드() 형식으로 클래스 안의 메서드를 호출
 
james = Person()
james.hello()    # Hello

속성(attribute)

속성만들기

class 클래스이름:
    def __ init __ (self):
        self.속성 = 값

예시

class Person:
    def __init__(self):
        self.hello = '안녕하세요.'
 
    def greeting(self):
        print(self.hello)
 
james = Person()
james.greeting()    # 안녕하세요.

init 메서드는 james = Person()처럼 클래스에 ( )(괄호)를 붙여서 인스턴스를 만들 때 호출되는 특별한 메서드. init (initialize)이라는 이름 그대로 인스턴스(객체)를 초기화합니다.

앞뒤에 언더바 붙은 메서드: 파이썬이 자동으로 호출해주는 메서드 - 스페셜 메서드(special method) 또는 매직 메서드(magic method)

greeting 메서드에서는 print로 self.hello를 출력하도록

-> init 메서드에서 속성을 만들고 greeting 메서드에서 속성을 사용
속성은 init 메서드에서 만든다는 점과 self에 .(점)을 붙인 뒤 값을 할당한다는 점이 중요

self 의미

self는 인스턴스 자기 자신을 의미

인스턴스 만들 때 값 받기

class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

예시

class Person:
    def __init__(self, name, age, address):
        self.hello = '안녕하세요.'
        self.name = name
        self.age = age
        self.address = address
 
    def greeting(self):
        print('{0} 저는 {1}입니다.'.format(self.hello, self.name))
 
maria = Person('마리아', 20, '서울시 서초구 반포동')
maria.greeting()    # 안녕하세요. 저는 마리아입니다.
 
print('이름:', maria.name)       # 마리아
print('나이:', maria.age)        # 20
print('주소:', maria.address)    # 서울시 서초구 반포동

비공개 속성

위 예시에서 속성들은 메서드에서 self로 접근할 수 있고, 인스턴스.속성 형식으로 클래스 바깥에서도 접근 가능.

비공개 속성(private attribute): 클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용 가능. 비공개 속성은 속성과 같이 이름이 (밑줄 두 개)로 시작(한쪽만)

class 클래스이름:
    def __init__(self, 매개변수)
        self.__속성 =

예: Person 클래스에 지갑 속성 __wallet 넣기

class Person:
    def __init__(self, name, age, address, wallet):
        self.name = name
        self.age = age
        self.address = address
        self.__wallet = wallet    # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
 
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.__wallet -= 10000    # 클래스 바깥에서 비공개 속성에 접근하면 에러가 발생함
class Person:
    def __init__(self, name, age, address, wallet):
        self.name = name
        self.age = age
        self.address = address
        self.__wallet = wallet    # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
 
    def pay(self, amount):
        self.__wallet -= amount   # 비공개 속성은 클래스 안의 메서드에서만 접근할 수 있음
        print('이제 {0}원 남았네요.'.format(self.__wallet))
 
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.pay(3000)

메서드도 언더바 두개로 이름이 시작하면 클래스 안에서만 호출 가능한 비공개 메서드.

문제 : 게임캐릭터 클래스 만들기

표준 입력으로 게임 캐릭터 능력치(체력, 마나, AP)가 입력됩니다. 다음 소스 코드에서 애니(Annie) 클래스를 작성하여 티버(tibbers) 스킬의 피해량이 출력되게 만드세요. 티버의 피해량은 AP * 0.65 + 400이며 AP(Ability Power, 주문력)는 마법 능력치를 뜻합니다.

class Annie:
    def __init__(self, health, mana, ability_power):
        self.health = health
        self.mana = mana
        self.ability_power = ability_power 
    def tibbers(self):
        print("티버: 피해량",self.ability_power * 0.65 + 400)

health, mana, ability_power = map(float, input().split())
 
x = Annie(health=health, mana=mana, ability_power=ability_power)
x.tibbers()
profile
roundy

0개의 댓글