반응형

파이썬에도 C++, Java와 같이 클래스라는 개념이 존재하고, 객체 지향의 개념이 존재한다.


클래스라는 개념을 처음부터 설명하는건 무리가 있어 보이고, 파이썬에서 어떻게 이용하는지 간단한 예제를 통해 알아보려 한다.


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
41
42
43
44
45
46
47
#-*- coding: CP949 -*-
 
# 클래스
 
# 클래스 선언 및 함수 정의
class fruit:
    def apple(self):
        return 'apple is red'
 
# fruit 객체 생성
= fruit()
a= f.apple()
print a
print f.apple()
 
 
 
 
# 클래스 선언 및 변수, 함수 정의
class man:
    height = 100
    weight = 200
    vital = 300
 
    def getProfile(self):
        return self.height + self.weight + self.vital + 1000
 
    # self를 통해 클래스의 객체를 구분한다.
    def upgrade(self):
        self.height += 10
        self.weight += 20
        self.vital += 30
 
# man 객체 생성
kkw = man()
 
# kkw 객체 내의 함수 호출
print kkw.getProfile()
    
print kkw.height, kkw.weight, kkw.vital
 
# 객체 내의 변수 연산
kkw.upgrade()
print kkw.getProfile()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



처음 클래스에서는 fruit라고 클래스명을 지정했다.


이때 f = fruit()를 하는 순간 객체 f를 생성했다고 할 수 있다.


a = f.apple()를 하면 fruit 클래스에서는 def apple(self)로 들어간다.


self는 자바에서의 this와 매우 유사한 역할을 하고, 객체 자신을 가르키게 된다.


항상 self는 첫 매개변수로 넣어준다고 생각하면 좋다.



아래 man 클래스도 위의 fruit와 똑같은 개념이다.


getProfile에서는 self.변수명을 통해 객체가 가진 변수호출이가능하고, upgrade에서는 객체 내의 변수 값 변경이 가능함을 보여준다.








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
#-*- coding: CP949 -*-
 
# 상속
 
class human:
    eyes = 2
    nose = 1
    mouth = 1
    ears = 2
 
    def eat(self):
        print '먹고있다..'
 
    def sleep(self):
        print '자고있다..'
        
    def hear(self):
        print '듣고있다..'
 
# man 클래스는 human 클래스를 상속 받는다.
class man(human):
    def walk(self):
        print '걷고있다..'
 
 
kkw = man()
 
kkw.hear()
kkw.walk()
print kkw.nose
print ''
 
www = human()
www.eat()
www.walk() # 이 부분에서 오류가 생긴다.
# man이 human을 상속받았지, human이 man을 상속받지는 않았다.
 
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



두번째로 상속에 관한 내용이다.


human 클래스를 위와같이 설정하고, 아래에는 class man(human)을 통해 man이 human을 상속 받도록 해준다.


이제 kkw라는 객체를 생성하면 human, man에 있는 모든 변수, 함수를 이용할 수 있게 된다.


kkw.hear(), kkw.walk()를 하면 최종적으로 human의 함수와 man의 함수가 이용가능함을 알 수 있다.






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
#-*- coding: CP949 -*-
 
# 클래스 속 객체
 
class phone:
    app =[] 
    
    def install(self, name):
        self.app.append(name)
        print name,'설치 완료'
 
    def delete(self, name):
        chk = False
        for i in self.app:
            if name in i:
                self.app.remove(i)
                print name,'삭제 완료'
                
                chk = True
 
        if not chk:
            print name,'은 존재하지 않는 앱입니다.'
 
 
sp = phone()
print '현재 앱 종류 : ', sp.app
sp.install('lin'# 객체 속 객체를 이용
print '현재 앱 종류 : ', sp.app
sp.delete('lin2')
sp.delete('lin')
print '현재 앱 종류 : ', sp.app
sp.delete('lin')
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



아래 내용은 위와 별 다른내용이 없지만, 클래스 내에서 또다른 객체가 생성될 수 있음을 알려주는 기본적인 코드이다.


app = []이라는 리스트 객체가 형성되어있으므로 phone는 클래스로 자신이 객체가 될것임에도 불구하고 app이라는 리스트 객체를 또 생성하게 된다.


위 코드의 결과를 보면 결국 install('lin')을 통해 lin이 app 리스트에 append되고, delete('lin')을 통해 lin이 list에서 삭제가 될 수 있다.























반응형