하고재비

[Python]객체 본문

Python

[Python]객체

DeadDE 2017. 11. 10. 15:36

클래스란 함수(메소드)와 변수(필드)를 하나의 단위로 묶는 방법


1
2
3
4
5
6
7
8
9
10
11
12
13
class Car:
    color= " "
    model= " "
    def drive(self):
        self.speed = 10
 
myCar = Car()
myCar.color = "blue"
myCar.model = "E-Class"
 
myCar.drive()            # 객체 안의 drive() 메소드가 호출된다. 
print(myCar.speed)        # 10이 출력된다. 
 
cs

객체의 기본 구성과 필드 메소드 선언, 메소드 사용

7번줄처럼 객체 선언 -> 8번, 11번처럼 객체 내 필드와 메서드 사용


메소드

1
2
3
4
def 함수명(입력 인수):
    <수행할 문장1>
    <수행할 문장2>
    ...
cs

클래스 안에서 선언된 함수들

메소드들의 매개변수들중 가장 첫번째는 항상 self가 되는데

객체의 인스턴스 그 자체를 의미함.


생성자

1
2
3
4
5
6
7
8
9
10
11
class Car:
    def __init__(self, speed, color, model):
        self.speed = speed
        self.color = color
        self.model = model
 
    def drive(self):
        self.speed = 60
 
myCar = Car(0"blue""E-class")
 
cs


생성자 =  클래스내 필드들의 초기화에 사용되는 메서드.

형식 = __init__(매개변수):

 self라는 매개변수가 컴파일러에 의해 자동으로 생성되는데 java의 this와 같이 

클래스 내 필드의 값을 지칭할때 사용된다. 


인스턴스 변수와 클래스 변수


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class DeadDE():
    age = 0         #인스턴스 변수
    name = ""       #인스턴스 변수
    count = 0       #클래스 변수
    def __init__(self):
        self.age = 50
        self.name = "MYNAME"
        DeadDE.count += 1
 
de1 = DeadDE()
de2 = DeadDE()
de1.age = 30
de2.age = 50
print(de1.age,"   ",de2.age,"  ",DeadDE.count)
cs
self.name과 같이 변수명 앞에 'self.'이 붙어있는것들은 인스턴스변수
그외 count 같은것들은 클래스 변수라고 함. 
인스턴스에 의한 초기화가 가능한 변수들과 클래스에 의한 초기화가 되는 변수들에 대한 구분

상속
기존 클래스의 필드와 메서드를 그대로 물려받아 새로운 클래스를 만드는것

1
2
class DeadDE(/*슈퍼클래스*/):
    #서브클래스 내용작성
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
class Car:
    speed = 0
    def upspeed(self, value):
        self.speed += value
        print("현재속도 (슈퍼클래스) : ", self.speed)
 
class Sedan(Car):
    seatNum = 0
    def upspeed(self, value):
        self.speed += value
        if self.speed > 150:
            self.speed = 150
 
        print("현재속도 (서브클래스) : ", self.speed)
 
class Truck(Car):
    pass
 
sedan1 = Sedan()
truck1 = Truck()
 
print("트럭 --> ", end="")
truck1.upspeed(300)
print("새단 --> ", end="")
sedan1.upspeed(200)
 
cs

결과
트럭 --> 현재속도 (슈퍼클래스) :  300
새단 --> 현재속도 (서브클래스) :  150


오버라이딩
슈퍼클래스의 메서드와 이름은 같지만 다른 행동(?)을 하는경우를 오버라이딩이라고 한다.
위 예제를 보면 트럭의 속도는 슈퍼클래스의 upspeed 메소드를 받아오기때문에 속도에 대한 제한이 없으나
세단의 경우에는 sedan클래스의 upspeed 메소드에 조건문으로 150이라는 속도제한이 걸려 있어, 같은 슈퍼클래스에서 상속
받은 메소드이지만 다른결과를 나타낸다.




'Python' 카테고리의 다른 글

[python] 디렉토리에 특정파일 찾기  (0) 2017.12.01
[python]꺽은선 그래프  (0) 2017.12.01
[Python] Dict 총정리  (0) 2017.10.23
[Python] List 총정리  (0) 2017.10.23
1. Python 변수 기본입출력 계산  (0) 2017.09.15
Comments