TIL | Get Ready for Django - 3

송치헌·2021년 7월 15일
0

self argument 이해하기

class Cafe():
  americano = 4000
  caffe_latte = 4500
  cappuccino = 4800
  espresso = 3800
  caffe_mocha = 5300

starbucks = Cafe()
pascucci = Cafe()
print(starbucks.americano)
print(pascucci.caffe_mocha)

저번 포스팅에서 썼던 코드를 그대로 가져와 봤다.
이번에는 class에서 method를 만드는 방법을 설명하겠다.

class Cafe():
  americano = 4000
  caffe_latte = 4500
  cappuccino = 4800
  espresso = 3800
  caffe_mocha = 5300
	
  def coffee_price():
  	print("coffee price is...")
    
starbucks = Cafe()
starbucks.coffee_price()

class안에 함수를 정의했다. 정확히 얘기하면 method를 정의한 것이다. functionmethod의 차이는 그냥 쉽게 설명해서 class안에 들어있냐 안들어있냐의 차이이다. 클래스 안에 정의되어 있으면 메소드, 밖에 있으면 함수 라고 이해하면 쉽다.

a = [1,2,3]
sum_of_numbers = sum(a)
count_one = a.count(1)
print(sum_of_numbers, count_one) # 6, 1

sum(a)함수는 독립적으로 쓰인다. 리스트 a의 요소들의 합을 리턴한다.
반면 a.count(1)은 a라는 객체가 있어야 사용할 수 있는 메소드이다.

다시 본론으로 돌아와서 위에 코드를 실행하면 어떻게 될까?

이러한 오류가 뜬다. coffee_price()메소드의 인자(arguments)는 0개로 설정했는데 1개가 들어왔다고 한다.

'오잉? 나는 argument도 0개로 설정하고 parameter로 보내준 것도 없는데?'

여기서 파이썬의 특징이 나타난다.

바로 객체에서 메서드를 호출하면 자동으로 객체 자기 자신을 파라미터로 집어 넣는다. 이게 무슨 말인가 하면

starbucks.coffee_price()를 호출하면
starbucks.coffee_price(starbucks)와 같다는 뜻이다.

파이썬에서 자동으로 객체를 메소드의 파라미터로 넣어주기 때문에 아래에 있는 것처럼 작성하면 안된다.

그래서 클래스에서 메소드를 정의할 때 argument를 하나 넣어주어야 한다. 그것이 바로 self이다. 꼭 self라고 정의하지 않아도 되고 아무거나 적어도 된다. 하지만 파이썬에서 self로 쓰자고 약속한 듯 보인다.(나는 그런 약속한적 없는데)

아무튼 이제 다시 코드를 작성해보자.

class Cafe():
  americano = 4000
  caffe_latte = 4500
  cappuccino = 4800
  espresso = 3800
  caffe_mocha = 5300
	
  def coffee_price(self):
  	print("coffee price is...")
    
starbucks = Cafe()
starbucks.coffee_price() # coffee price is...

profile
https://oraange.tistory.com/ 여기에도 많이 놀러와 주세요

0개의 댓글