티스토리 뷰
7.2.2 객체 생성하기(Constructing Objects)
※ constructor 와 initializer를 번역함에 있어 영어로는 간단히 구분이 가능 하지만 한국어로는 간단히 구분히 되지 않아 둘 다 편의상 생성자로 번역하였습니다. 아래의 포스팅을 보기 전에 이 둘의 의미를 아래와 같이 이해하시기 바랍니다.
◇ initializer(__init__) : __init__메소드를 사용하여 생성자를 만든 경우, 이 생성자를 initializer 라고 표현
◇ constructor : initializer(__init__) 메소드를 이용하여 정의한 생성자를 사용(use)할 경우, 이 생성자를 constructor 라고 표현.
- 클래스(class)가 정의되어 있을 떄, 클래스의 생성자(constructor)를 이용해 객체를 만들 수 있다.
- 생성자(constructor)가 하는 일은 다음과 같다.
■ 사용할 클래스의 메모리에 객체를 생성한다.
■ 클래스의 __init__ 메소드를 호출하여 객체를 초기화한다.
- 생성자(initializer, __init__)를 포함한 모든 메소드들은 첫번째 매개변수로 self 매개변수를 가지고 있다.
- __init__ 함수의 self 매개변수는 방금 생성된 객체를 자동으로 참조한다..
- self 매개변수의 이름을 직접 정할 수 있지만, 통상적으로 그냥 self라고 쓴다.
* 생성자(constructor) 사용(use) 형식
ClassName(arguments)
*Circle 클래스 (이전 포스트의 Circle.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
import math
class Circle:
#circle 객체 생성
def __init__(self, radius = 1):
self.radius = radius
def getperimeter(self):
return 2 * self.radius * math.pi
def getArea(self):
return self.radius * self.radius * math.pi
def setRadius(self, radius):
self.radius = radius |
cs |
- 생성자(construtor)를 사용할 떄, 생성자(constructor)의 인자(arguments)들은 self를 제외한 __init__ 메소드의 매개변수와 일치한다. 위치 인자, 키워드 인자 등
- 예를 들어, line 5의 __init__ 메소드는 __init(self, radius = 1)이라고 정의되어 있다. 우리가 radius = 5 인 Circle 객체를 만들고 싶다면, Circle(5)라고 작성해야 한다.
- 먼저 Circle 객체가 메모리에 생성되고, 그런 다음 생성자(constructor)가 radius를 5로 설정한다.
- 위 Circle 클래스의 생성자(initializer, __init__)는 초기값(default)으로 radius = 1을 가지는 것을 의미하고 Circle()이라고 작성하면 Circle 객체의 radius는 1로 초기값이 설정된다.
*Circle(5)를 사용하여 Circle 객체를 만든 모습
7.2.3 객체의 멤버에 접근하기(Accessing Members of Objects)
- 객체의 멤버란, 객체의 데이터 필드(data field)와 메소드(method)를 의미한다.
- 이전 포스트에서 객체와 인스턴스(instance)를 구분하지 않은 것 처럼, 각 객체의 데이터필드를 인스턴스 변수(instance variables)라고 부르며, 메소드 역시 인스턴스 메소드(instance method)라고 부른다.
- 객체의 데이터 필드와 메소드에 접근하기 위해서 변수에 객체를 할당해야만 한다.
*변수에 객체 할당 형식
objectRefVar = ClassName(arguments)
예를 들어,
c1 = Circle(5)
c2 = Circle()
- 객체의 멤버와 메소드에 접근하기 위해 우리는 점 연산자( . , dot operator)를 사용 할 수 있다. 점 연산자를 객체 멤버 접근 연산자(object member access operator)라고 부르기도 한다.
* 점 연산자(dot operator) 사용 형식
objectRefVa.datafield
objectRefVa.method(args)
- Circle 객체를 예로 들어, 아래와 같이 입력하면 Circle 객체의 각 데이터 필드와 메소드에 접근 할 수 있다.
- Circle 클래스를 임포트 한다는 것 잊어서는 안된다.
- 보통 객체를 생성하여 변수에 할당하는데, 가끔은 객체 차후에 참조할 필요가 없는 경우가 생긴다.
- 그런 경우엔 아래와 같이 변수에 할당할 필요 없이 객체를 만들어 낼 수 있다.
print("Area is ", Circle(5).getArea())
- 위와 같은 방법도 Circle 객체를 생성하며, getArea 메소드를 호출하고 값을 반환한다.
- 이런 방법으로 생성된 객체를 우린 익명 객체(anonymous object)라고 부른다.
7.2.4 self 매개 변수(The self Parameter)
- 앞서 언급한 바와 같이, 각 메소드들의 첫번째 매개변수로 self가 정의되어 있다.
- self 매개변수는 메소드를 구현할 때는 사용하지만, 메소드를 호출 할 때는 사용되지 않는다.
- self는 객체 자기 자신을 참조하는 매개변수이다. (자바로 따진다면 this와 유사하다)
- self를 사용함으로써, 클래스내에 정의한 멤버에 접근 할 수 있다.
- 아래의 예제를 들어, self.x 라고 작성하여 인스턴스 변수인 x에 접근이 가능하고, self.m1()을 사용하여 인스턴스 메소드인 m1()을 호출 할 수 있다.
*인스턴스 변수 가용 범위
- 인스턴스 변수의 가용 범위는 해당 클래스 전체이다.
- 위 __init__ 메소드에서 self.x가 인스턴트 변수를 생성한 모습이다. 나중에 m2()에서 지역변수 u를 할당할 때 slef.x로 접근한다.
- 인스턴트 변수 self.y는 m1() 메소드에서는 2가, m2() 메소드에서는 3이 할당 된다.
- 지역 변수의 가용 범위는 메소드 안으로 제한된다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 이론' 카테고리의 다른 글
[파이썬]불변 객체와 가변 객체, 데이터 필드 숨기기(data hiding) (0) | 2017.08.04 |
---|---|
[파이썬]클래스 사용하기, UML 클래스 다이어그램 (0) | 2017.08.03 |
[파이썬]객체와 클래스(Objects and Classes),생성자(initializer) (2) | 2017.07.31 |
[파이썬]함수 추상화와 단계적 개선 (2) (0) | 2017.07.30 |
[파이썬]랜덤 ASCII 문자 생성, 함수 추상화와 단계적 개선(1) (0) | 2017.07.28 |
- Total
- Today
- Yesterday
- 웹
- 명품 c++ 실습
- css
- 파이썬 함수
- 자료구조
- 파이썬 클래스
- 자바스크립트 자료구조
- 버츄어박스
- 파이썬 터틀
- 자바
- 파이썬 선택문
- css 그리드
- 자바 에센셜 실습문제
- 백준 1874
- 파이썬 리스트
- 파이썬 if문
- 백준
- 백준 11501
- 파이썬 예제
- 파이썬 단계적 개선
- 파이썬 for
- 파이썬 문자열
- 백준 10451
- 자바스크립트 그래프
- 파이썬 while
- 파이썬 진수 변환
- 파이썬
- 파이썬 객체
- 파이썬 연산자
- css 박스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |