본문 바로가기

파이썬 프로그래밍/파이썬 기초

[Python] 파이썬 클래스, 인스턴스, 모델링, 메소드 정의, 기초 개념잡기

개념

클래스

- 변수나 함수들을 모아서 필요할때 사용할 수 있는 집합체

인스턴스

- 클래스에 의해 만들어진 객체
- 인스턴스는 각자 자신의 값을 가지고 있음

모델링

- 클래스로 현실의 개념을 표현


메소드

- 함수와 비슷한 개념
- 클래스에 묶여서 클래스 안에 있는 인스턴스와 관계되는 함수




실습

클래스 선언 (변수나 함수들을 모아 필요할때 사용하는 집합체)

1
2
3
#사람이라는 클래스를 작성
class Human():
    '''이야 사람이다'''
cs
class 클래스명
내용


인스턴스 생성(클래스에 의해 만들어진 객체)

1
2
3
    #Human이라는 클래스의 인스턴스로 person1, person2 생성
person1 = Human()#즉 Human이라는 클래스에 person1이라는 인스턴스가 생성됨
person2 = Human()#즉 Human이라는 클래스에 person2라는 인스턴스가 생성됨
cs


클래스의 특성 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#클래스 생성#
class alphago():
    '''나는 판별하는 알파고다'''
#클래스 생성 끝#
 
 
 
##인스턴스 생성##
choice1 = alphago()
choice2 = alphago()
##인스턴스 생성 끝##
 
 
 
###클래스 특성 만들기###
choice1.what = '강아지'
choice2.what = '사람'
 
choice1.speak = '말해'
choice2.speak = '짖어'
 
def rst(choice):
    print('엄마!! 저기 {}이(가) {}요!!'.format(choice.what, choice.speak))
alphago.rst = rst
 
choice1.rst()
choice2.rst()
###클래스 특성 만들기 끝###
cs

클래스 특성만들기 실행




모델링(클래스의 개념을 현실에 표현)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#사람이라는 클래스를 작성
class Human():
    '''!사람 클래스 생성!'''
 
 
'''사람 만들기 함수'''
def create_Human(name, age): #사람의 이름과 나이를 넣어 만들것이다 
    person = Human()         #Human클래스를 person에 넣어 사용!. @@인스턴스 생성@@
    person.name = name         #class의 이름은 name로 사용!
    person.age = age         #class의 나이는 age로 사용!
    return person             #함수를 끝내고 person으로 돌아간다!
#이 함수(def)는 인간의 형태를 만드는데 위에 선언한 클래스를 사용하여 이름과 나이를 집어넣는다는 뜻입니다.
 
Human.create = create_Human
#클래스를.만든다 = 함수를 통해서
#다시 설명하자면 create_Human(함수에서 만든 내용을) 클래스에 집어 넣는다.
 
 
###========여기까지가 클래스의 뼈대만들기 입니다.=========###
 
'''본격적으로 사용자가 값을 집어넣어 볼까요?'''
person = Human.create('짱구',10#person에 짱구, 10이라는 값을 넣어준다.(14줄에 선언한것)
 
###========여기까지가 클래스의 살붙이기 입니다.=========###
 
 
def old(person):    #person에 old가 들어온다면
    person.age += 1 #1살을 먹이겠다!
    print('{}가 나이를 먹어서 {}살이 되었습니다.'.format(person.name, person.age)) #1살 먹인것 확인
 
def young(person):    #person에 young가 들어오면
    person.age -= 1  #1살을 줄여주겠다!
    print('{}가 과거로 돌아가 {}살이 되었습니다.'.format(person.name, person.age))#1살 줄이기 확인
 
Human.old = old            #27~29줄을 클래스에 넣어주겠다
Human.young = young        #31~33줄을 클래스에 넣어주겠다
 
person.old()            #이렇게 인스턴스에 함수를 호출하는것을 메소드를 호출한다고 한다.
person.young()          #이렇게 인스턴스에 함수를 호출하는것을 메소드를 호출한다고 한다.
person.old()            #이렇게 인스턴스에 함수를 호출하는것을 메소드를 호출한다고 한다.Colored by Color Scripter
cs

모델링 실행결과



이 방법은 실행하는데는 문제가 없으나
빈 클래스를 만들고 함수는 따로만들고 클래스에 함수를 넣는것은 번거로우므로
클래스는 메소드를 다루기 위해 제공하는 문법을 사용해보겠습니다.

위에 사용하는 짱구가 1살 먹고 줄어들고 하는 모델링예시를 가지고 해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#사람이라는 클래스를 작성
class Human():    #클래스 생성
    '''이야 사람이다'''
    def create(name, age):#create라는 이름의 함수로 사람 뼈대만들기!
        person = Human()
        person.name = name
        person.age = age
        return person
 
    def old(person):
        person.age += 1
        print('{}가 나이를 먹어서 {}살이 되었습니다.'.format(person.name, person.age))
 
    def young(person):
        person.age -= 1
        print('{}가 과거로 돌아가 {}살이 되었습니다.'.format(person.name, person.age))
#클래스안에 이 모든것을 넣어준다#
 
 
person = Human.create('짱구',10)
person.old()
person.young()
person.old()
cs

실행결과

클래스안에 함수들만을 넣어준것 빼고는 달라진 코드가 없는데 훨씬 사용하기 쉬워졌다