Priv's Blog
생성자(Constructor : 컨스트럭터) 본문
먼저 함수, 메소드, 생성자의 관계를 표현하면,
함수 (특정 기능의 집합)
메소드 (클래스 안의 함수)
생성자 (객체를 생성할 때 자동으로 호출)
여기서 생성자, 메소드는 특별한 용법이 정해지지 않음
단, 메소드의 이름은 자유롭게 설정이 가능하지만, 생성자는 __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가 된다.
'Dev. Study Note > Python' 카테고리의 다른 글
클래스 다중 상속 중, MRO에 따르는 점에 주의할 부분 (0) | 2019.08.21 |
---|---|
클래스 개념 용어 정리 (0) | 2019.08.17 |
외부 파일을 read로 불러와 순서대로 나열한 뒤 콘솔에 출력하기 (0) | 2019.08.17 |
if문에 or 연산자 사용할 때 주의할 점 (0) | 2019.08.09 |
객체, 인스턴스, 인스턴스화 (0) | 2019.08.05 |
Comments