Python - 속성 사용하기

심준보·2023년 1월 16일
0

Python

목록 보기
1/6
post-thumbnail

클래스에서 속성을 만들고 사용해보자

속성을 만들 때는 __init__ 메서드 안에서 self.속성에 값을 할당한다.

기본)

class 클래스이름:
	def__init__(self):
    self.속성 = 값

예1)

class Person:
	def__init__(self):
		self.hello = '안녕하세요.'
    def greeting(self)
    	print(self.hello)
        
james=person()
james.greeting()
실행결과 : 안녕하세요.

예1 설명)

  • Person 클래스의 init 메서드에서 self.hello에 '안녕하세요.'인사말을 넣었다.
class Person:
    def __init__(self):
        self.hello = '안녕하세요.'

init 메서드는 james = Person() 처럼 클래스에 () 를 붙여서 인스턴스를 만들때 호출되는 특별한 메서드 이다.

즉 , init 이라는 이름 그대로 인스턴스를 초기화한다.

특히 , 이렇게 앞 뒤로 __(밑줄두개) 가 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드인데 스페셜 메서드 또는 매직 메서드 라고 부릅니다. 앞으로 파이썬의 여러가지 기능을 사용할때 이 스페셜 메서드를 채우는 식으로 사용하게 된다.

  • 이제 greeting 메서드를 살펴보자. greeting 메서드에서는 print로 self.hello를 출력하도록 만들었다.
 def greeting(self):
        print(self.hello)
  • 그 다음에 Person 클래스로 인스턴스를 만들고 , greeting 메서드를 호출해보면 self.hello 에 저장된 '안녕하세요.' 가 출력된다.
james = Person()
james.greeting()    # 안녕하세요.

지금까지 init 메서드에서 속성을 만들고 greetig 메서드에서 속성을 사용해보았다.
속성은 init 메서드에서 만든다는 점과 self에 .을 붙인 뒤 값을 할당한다는 점이 중요하다. 클래스 안에서 속성을 사용할 때도 self.hello처럼 self에 점을 붙여서 사용하면 된다.

self의 의미

도대체 self는 무엇일까. self는 인스턴스 자기 자신을 의미한다. 우리는 인스턴스가 생성될 때 self.hello = '안녕하세요 ' 처럼 자기 자신에 속성을 추가했다.
여기서 init 의 매겨변수 self에 들어가는 값은 Person()이라 할 수 있다 .
그리고 self가 완성된 뒤 james에 할당된다. 이후 메서드를 호출하면 현재 인스턴스가 자동으로 매개변수 self에 들어온다. 그래서 greeting 메서드에서 pring(self.hello) 처럼 속성을 출력할 수 있는 것이다.

인스턴스와 self의 관계를 그림으로 나타내면 다음과 같다.

지금까지 만든 클래스는 인사만 할 줄 아는 단순한 클래스이다.

클래스로 인스턴스를 만들어봐야 다 똑같이 '안녕하세요'만 출력할 뿐이다.

인스턴스를 만들 때 값 받기

이번에는 클래스로 인스턴스를 만들 때 값을 받는 방법을 알아보겠다.
다음과 같이 init 메서드에서 self다음에 값을 받을 매개변수를 지정한다.
그리고 매겨변수를 self.속성 에 넣어준다.

class 클래스이름:
   def __init__(self, 매개변수1, 매개변수2):
       self.속성1 = 매개변수1
       self.속성2 = 매개변수2

그럼 Person 클래스로 인스턴스를 만들 때 이름,나이,주소를 받아보겠다.

class Person:
   def __init__(self, name, age, address):
       self.hello = '안녕하세요.'
       self.name = name
       self.age = age
       self.address = address

   def greeting(self):
       print('{0} 저는 {1}입니다.'.format(self.hello, self.name))

maria = Person('마리아', 20, '서울시 서초구 반포동')
maria.greeting()    # 안녕하세요. 저는 마리아입니다.

print('이름:', maria.name)       # 마리아
print('나이:', maria.age)        # 20
print('주소:', maria.address)    # 서울시 서초구 반포동

실행결과

안녕하세요. 저는 마리아입니다.
이름: 마리아
나이: 20
주소: 서울시 서초구 반포동

init 메서드를 보면 self 다음에 name,age,address 를 지정했다. 그리고 메서드 안에서는 self.name = name 처럼 매개변수를 그대로 self에 넣어서 속성으로 만들었다.

def __init__(self, name, age, address):
        self.hello = '안녕하세요.'
        self.name = name
        self.age = age
        self.address = address

greeting 메서드는 인사를 하고 이름을 출력하도록 수정했다. 물론 name 속성에 접근할때는 self.name처럼 사용해야한다.

def greeting(self):
        print('{0} 저는 {1}입니다.'.format(self.hello, self.name))

이제 Person의 () 안에 이름,나이,주소를 콤마로 구분해서 넣은 뒤에 변수에 할당한다. 이렇게 하면 이름은 '마리아' , 나이는 20, 주소는 '서울시 서초구 반포동' 인 maria 인스턴스가 만들어진다.

maria = Person('마리아', 20, '서울시 서초구 반포동')

즉 , 다음과 같이 Person 의 괄호 안에 넣은 값은 init 메서드에서 self 뒤에 있는 매겨변수에 차례대로 들어간다.

maria 인스턴스의 greeting 메서드를 호출해보면 '안녕하세요. 저는 마리아입니다' 처럼 인삿말과 함께 이름도 출력이 된다.

maria.greeting()    # 안녕하세요. 저는 마리아입니다.

클래스 안에서 속성에 접근할 때는 self.속성 이었다. 클래스 바깥에서 속성에 접근 할 때는 인스턴스.속성 형식으로 접근한다. 다음과 같이 maria.name ,maria.age , maria.address 의 값을 출력해 보면 Person으로 인스턴스를 만들 때 넣었던 값이 출력된다.

print('이름:', maria.name)       # 마리아
print('나이:', maria.age)        # 20
print('주소:', maria.address)    # 서울시 서초구 반포동

이렇게 인스턴스를 통해 접근하는 속성을 인스턴스 속성이이라고 한다.

실제 업무에서 적용해보기)

SOURCE = 'KRX-TRACKING-ERROR-RATE'
JOB = 'EXTRACT'

TODAY = datetime.now().strftime("%Y-%m-%d")
DATATODAY = (datetime.now() - timedelta(days=1)).strftime("%Y%m%d")

class MongoTemplate:
    def __init__(self,target, data) -> None:
        self.date = TODAY
        self.source = SOURCE
        self.target = target
        self.job = JOB
        self.data = data

위 코드를 분석해보면 ,self 뒤의 target,data(매겨변수) 가 self.속성에 값으로 들어가있다.

추가로 위의 SOURCE ,JOB , TODAY 도 self.속성에 들어갔다.

참고자료

https://dojang.io/mod/page/view.php?id=2373

이상으로 Python- 속성 사용하기를 마치도록 하겠습니다.




더 나은 개발이 되길 바라며:)

profile
밑거름이라고생각합니다

0개의 댓글