Pv_log

생성자(Constructor : 컨스트럭터) 본문

Develop Study/Python

생성자(Constructor : 컨스트럭터)

Priv 2019. 8. 17. 19:34

 

먼저 함수, 메소드, 생성자의 관계를 표현하면,

 

함수 (특정 기능의 집합)

    메소드 (클래스 안의 함수)

        생성자 (객체를 생성할 때 자동으로 호출)

 

 

여기서 생성자, 메소드는 특별한 용법이 정해지지 않음

 

단, 메소드의 이름은 자유롭게 설정이 가능하지만, 생성자는 __init__이라는 정해진 이름을 사용해야 한다.

 


 

아래의 코드는 삼각형 객체를 생성하고 밑변과 높이를 인자로 받아서 생성자를 이용해 변수에 저장한 뒤, 공식에 대입해 계산한 값을 반환하는 코드이다.

class Triangle :
    def __init__(self, b, h) : #생성자
        self.b = b
        self.h = h
    
    def area(self) :
        return self.b * self.h / 2

   
tri1 = Triangle(4, 5) #호출하면서 바로 인자 전달
tri2 = Triangle(6, 10)
tri3 = Triangle(2, 7)

print(tri1.b, tri1.h, tri1.area())
print(tri2.b, tri2.h, tri2.area())
print(tri3.b, tri3.h, tri3.area())

 

 

아래의 코드는 윗 코드와 동일한 기능을 하지만, 생성자를 사용하지 않고 구현한 코드이다.

 

(생성자가 없으므로 Triangle(4, 5) 형태로 코드를 작성할 수 없으며, 이 때문에 객체를 생성할 때마다 매번 setData()를 실행해야하는 번거로움이 있다.)

class Triangle :
    def setData(self, b, h) :
        self.b = b
        self.h = h
    
    def area(self) :
        return self.b * self.h / 2

tri1 = Triangle()
tri1.setData(4, 5)

tri2 = Triangle()
tri2.setData(6, 10)

tri3 = Triangle()
tri3.setData(2, 7)

print(tri1.b, tri1.h, tri1.area())
print(tri2.b, tri2.h, tri2.area())
print(tri3.b, tri3.h, tri3.area())

 

 


 

tri1 = Triangle(4, 5) 형식으로 객체를 생성하면,

 

__init(self, b, h) 에 4, 5의 값이 전달되어 b = 4, h = 5가 된다.

 

 

0 Comments