0. 객체란?
1. 객체 초기화 : __init__( )
- 초기화(initializing)란 "뭔가를 초기에 준비시키는 것"을 의미합니다. 소프트웨어에서 뭔가를 초기화할 경우 우리가 원하는 상태나 조건에 이르게 함으로써 그것을 사용할 준비를 갖출 수 있습니다.
- 객체가 생성될 때 객체의 속성을 설정하는 방법을 객체 초기화라고 합니다.
- 객체 초기화는 클래스를 정의할 때 [ __init__( ) , 양 옆 밑줄 두 개]이라는 특별한 메서드로 정의할 수 있습니다. 이 메서드는 클래스의 새 인스턴스가 만들어질 때마다 실행됩니다.
- __init__( ) 메서드에 인자를 전달해 내가 원하는 속성을 갖춘 인스턴스를 만들 수 있습니다.
# 예시1.1 ( [ __init__( ) ] 를 사용하지 않고 속성 설정1)
-> 위 코딩의 속성은 클래스에 속해있지 않은것을 볼 수 있습니다. (속성은 각 인스턴스에 속해있습니다.)
# 예시 1.2 ( [ __init__( ) ] 를 사용하여 속성 설정1)
-> [ __init__( ) ]이라는 특별한 메서드로 class 객체가 생성될 때 객체의 속성을 정의하였습니다! 또한 __int__( )에 인자로 속성("멍구", "brown", "big")을 전달했습니다!
# 예시 2.1 ( [ __init__( ) ] 를 사용하지 않고 속성 설정2)
-> 위 코딩 역시 속성은 클래스에 속해있지 않은것을 볼 수 있습니다. (속성은 각 인스턴스에 속해있습니다.)
# 예시 2.2 ( [ __init__( ) ] 를 사용하여 속성 설정2)
-> [ __init__( ) ]이라는 특별한 메서드로 class 객체가 생성될 때 객체의 속성을 정의하였습니다! 또한 __int__( )에 인자로 속성("orange", "small", "on)을 전달했습니다!
2. print 메서드 : __str__( )
- [ __str__( ) ] 은 객체에 대해 print를 호출할 때 파이썬이 어떤 내용으로 표시할지 알려줍니다.
- 기본적으로 파이썬은 다음과 같은 3가지 내용을 출력합니다.
- 1. 인스턴스가 정의된 곳
- 2. 클래스명
- 3. 인스턴스가 저장돼 있는 메모리 상의 위치
- print를 이용해 객체에 대해 다른 뭔가를 보여주고 싶다면 직접 [ __str__( ) ] 을 정의할 수 있습니다. 그러면 내장된 [ __str__( ) ]이 재정의됩니다.
# 파이썬이 기본적으로 호출하는 정보
-> print (myDog)를 실행하면 (__main__.Dog object at 0x7fe69e8eec18>이 출력되는 것을 볼 수 있습니다.
이는 기본적으로 파이썬이 내장된 정보를 출력하는 것으로
1. 인스턴스가 정의된 곳 (위 예제에서는 프로그램의 주요 부분인 __main__)
2. 클래스명 (Dog)
3. 인스턴스가 내장돼 있는 메모리 상의 위치 (0x7fe69e8eec18)
를 의미합니다.
이 print 실행의 결과를 바꾸려면 [ __str__( ) ] 라는 메서드를 추가하면 됩니다. __str__( )은 내가 출력하고 싶은 내용을 반환하므로, print (myDog)와 같은 코드를 실행할 때마다 원하는 대로 결과가 출력됩니다.
# __str__() 메서드를 사용하여 print(객체)의 원하는 값 출력
-> __str__( )으로 정의한 새로운 함수의 return값 msg가 print(myDog)의 return value인 것을 볼 수 있습니다!
3. self란?
클래스를 이용하면 다음과 같이 객체의 인스턴스를 여러 개 만들어낼 수 있습니다.
>>> kimsDog = Dog( "뭉치", "grey", "small" )
>>> parksDog = Dog( "꼬미", "black", "small" )
이러한 인스턴스 중 하나에 대해 메서드를 호출할 경우,
>>> kimsDog.bark( )
해당 메서드는 어느 인스턴스에서 메서드를 호출했는지 알아야 합니다. self 인자는 어느 객체가 메서드를 호출했는지 알려줍니다. 이를 인스턴스 참조(instance reference) 라고 합니다.
kimsDog.bark( )를 작성했을 때 내부적으로 파이썬은
Dog.bark( kimsDog )
즉 [ 클래스.메서드(인스턴스) ] 로 작동됩니다.
이는 클래스 메서드를 호출할 때, 첫 인자로 인스턴스가 전달되는 것이 됩니다!
예를 들어
>>> def bark( self ):
print ("멍")
라는 메서드의 인자 self 에 파이썬은
인스턴스 kimsDog 을 자동으로 전달합니다.
>>> kimsDog.bark( )
대신 내부적으로 파이썬이 실행시키는 코드
>>> Dog.bark(kimsDog)
으로 작성해도 동작을 할 것입니다.
참고로 파이썬에서 self라는 이름에는 특별한 의미가 없습니다. 이것은 모든 사람들이 인스턴스 참조를 가리킬 때 사용하는 이름일 뿐입니다. 즉, 코드를 더 읽기 쉽게 만들어주는 또 하나의 관례에 불과합니다.
4. class 예시 : 해가 지날수록 자라는 강아지 출력하기
막 태어난 새끼 강아지로 시작해봅시다.
나이는 0살이고, 작고, 아직 아무것도 먹지 않았습니다.
if 를 사용해 해가 지날수록 강아지 나이가 증가하는 것을 출력할 수 있습니다.
이제, 여기에 강아지 음식을 몇 가지 추가해봅시다. 이를 처리할 새로운 메서드가 필요합니다.
[ __str__( ) ] 함수를 추가하면 객체를 출력하기 쉬워지므로 __str__() 함수를 이용할 것입니다.
* len( ) : Return the number of items in a container.
* rstrip( ) : 인자로 전달된 문자를 string의 오른쪽을 제거
( *lstrip( ) : 인자로 전달된 문자를 string의 왼쪽에서 제거
*strip( ) : 인자로 전달된 문자를 string의 오른쪽과 왼쪽에서 제거)
* .append : 리스트 끝에 항목을 하나 추가
참고문헌 : 위렌 산데/ 카터 산데, 헬로! 파이썬 프로그래밍, 위키북스, 2015
'프로그래밍 > Python 프로그래밍 기초' 카테고리의 다른 글
8. 파이썬 기초 (파이썬 자료 추상화, 데이터은닉, 다형성, 상속, 오버라이딩, 다중상속 ) (0) | 2021.02.14 |
---|---|
6. 파이썬 기초 (객체 object, 클래스 class, 인스턴스 instance, 속성 attribute, 메서드 method) (0) | 2021.02.03 |
5. 파이썬 기초 (함수, function, def, return value) (0) | 2021.01.24 |
4. 파이썬 기초 (파이썬 반복문, for 반복문, range, while 반복문, break, continue) (0) | 2021.01.22 |
3. 파이썬 기초 (파이썬 조건문, condition, 연산자, if, elif, else) (0) | 2021.01.21 |