cs 7. 파이썬 기초 (객체 초기화, __itit__, initializing, 특수 메서드, __str()__ , self , class 예시) :: 맥스웰과 데자와

0. 객체란?

 

gksid102.tistory.com/21

 

6. 파이썬 기초5 (객체 object, 클래스 class, 인스턴스 instance, 속성 attribute, 메서드 method)

0. 리스트와 함수 리스트 : 변수(데이터)를 모으는 한 가지 방법 함수 : 코드를 끊임없이 재사용할 수 있는 단위로 모으는 방법 1. 객체 (Object) 객체는 실제로 존재하는 모든 것들이다. 객체는 함수

gksid102.tistory.com

 

 

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

+ Recent posts