TIL10: python-7

Seoyul Kim·2020년 4월 5일
0

Python

목록 보기
11/16

scope(범위)

  • 프로그래밍 언어에서 scope은 어떠한 객체(변수, 함수)가 유효한 범위를 이야기 하며 범위를 벗어나면 해당 객체는 사용될 수 없다.
  • 파이썬에서 스코프는 항상 객체가 선언된 지점에서 위로는 상위 객체까지 아래로는 모든 하위 객체들과 그 안에까지가 범위이다.
- local scope     #가장 제한적이다.
- enclosed scope
- global scope
- built in scope  #가장 범위가 광범위하다.

1. local scope

  • local scope를 가지고 있는 변수나 함수 혹은 객체는 이름 그대로 특정 범위에서만 유효하다.
  • 주로 함수 안에서 선언된 변수나 함수가 local scope을 가지고 있으며 이러한 변수들은 해당 함수 안에서만 유효하다.

2. enclosing scope

  • 중첩함수가 있을 때 적용되는 스코프로 부모함수에서 선언된 변수는 중첩함수 안에서도 유효한 범위를 가지고 있다.

3. global scope

  • 함수 안에서 선언된것이 아닌 함수 밖에서 선언된 변수나 함수를 이야기한다.
  • 변수나 함수는 선언된 지점과 동일한 level의 지역 그리고 더 안쪽의 지역들까지 범위가 유효하다.
  • global scope을 가지고 있는 변수와 함수들은 선언된 지점이 해당 파일에서 가장 바깥쪽에서 선언되므로 해당 파일에서 선언된 지점 아래로는 다 유효한 범위를 가지고 있다.

4. built in scope

  • scope중 가장 광범위한 scope로 파이썬 안에 내장되어 있는 파이썬이 제공하는 함수 또는 속성들이 built-in scope를 가지고 있다.
  • 따로 선언이 없이도 모든 파이썬 파일에서 유효한 범위를 가지고 있다.
    예를 들어 list등과 같은 자료구조의 element 총 개수를 리턴하는 len함수가 built-in scope를 가지고 있다

4. shdowing

  • 파이썬은 변수나 함수의 정의를 찾을 때 다음 순서의 scope들 안에서 찾는다
local —> enclosing —> global —>built in
  • 가장 좁은 유효범위부터 시작해서 넓은 범위로 나아가며 사용되는 변수나 함수의 정의를 찾기 때문에 만일 동일한 이름의 변수들이 서로 scope에서 선언이 되면 더 좁은 범위에 있는 변수 혹은 함수가 더 넓은 범위에 있는 변수를 가리는 (shadowing)효과가 나타난다.

class

1. class정의하기

  • 파이썬에서 class를 선언하기 위해서는 다음과 같이 class 키워드를 사용하면 된다
class Classname:
	...class 내용 코드들
  • 클래스 이름은 각 단어의 앞글자를 대문자로 사용한다.
  • 만일 한 단어 이상으로 이루어져 있다면 밑줄(underscore)없이 모든 단어를 다 붙이되 각 단어의 앞글자를 대문자로 해서 단어를 구분하게 된다.(ScotchWhiskey)
  • class가 정의되면 class로부터 실체화(instantiate)할 수 있으며 클래스를 실체화 하는 방법은 함수를 호출하듯이 클래스도 호출하면 된다.
hyundai = car()
  • Car class를 실체(instance)화 한것이 hyundai와 bmw라는 객체(object)이다

2. class의 attribute(속성)

  • class에 정의되는 공통 요소들을 attribute(성질 혹은 속성)라고 한다.
  • 속성들을 class에서 정의하기 위해서는 다음과 같이 __init__함수를 통해서 정의해주면 되며, class안에서 정의해주는 함수(function)는 function이라고 하지 않고 method라고 한다.

class Car:
	def __init__(self, maker, model, horse_power)
		self.maker = maker
		self.model = model
		self.hose_power = horse_power
  • __init__
    init이라는 단어 앞 뒤에 밑줄 2개가 있다. 이렇게 앞뒤로 밑줄 2개가 있는 메소드들을 special methods라고 하며 class가 실체화 될 때 사용되는 함수이다.
hyundai = Car("현대', "제네시스", 500)
  • 여기서 이미 __init__메소드가 호출이 됐다 메소드 이름을 명화하게 명시하지는 않았지만 클래스가 실체화 될 때 자동으로 __init__메소드가 호출이 된다.
  • class 자체는 공통점이 있는 부류를 가리키는 개념인 반면에 self는 어떠한 실체를 가르키는 단어이다.
  • self는 clss의 실체(instance)인 객체(object)이다.
  • 클래스를 실체화 할 때 해당 객체(self)를 자동으로 __init__ 함수에 넘겨준다.
    -__init__ 메소드는 클래스가 실체화 될 때 자동으로 호출이 된다.
    -__init__ 메소드의 self파라미터는 클래스가 실체화된 객체를 넘겨주어야 하며 파이썬이 자동으로 넘겨준다.
    -__init__ 메소드의 self 파라미터는 항상 정의되어 있어야하며 맨 처음 파라미터로 정의되어야 한다.(그래야 파이썬이 알아서 넘겨줄 수 있다)
class Car:
	def __init__(self, maker, model, horse_power)
		self.maker = maker
		self.model = model
		self.hose_power = horse_power
  • parameter로 넘겨진 것들이 동일한 이름으로 self에 지정한다.
  • self는 객체이므로 객체에 maker, model, horse_power를 나중에 다른 메소드에서 다시 사용하기 위해서 저장한다.

3. class method

  • 클래스에서 __init__ 말고도 다른 메소드를 원하는대로 추가할 수 있다.
  • method와 attribute(속성)의 차이는 명사와 동사의 차이와 비슷하다.
  • 속성은 해당 객체의 이름 등의 정해진 성질인 반면 메소드는 Move, eat 등 객체가 행할 수 있는 어떠한 action같은 느낌이다.
class Car:
	def __init__(self, maker, model, horse_power)
		self.maker = maker
		self.model = model
		self.hose_power = horse_power

	def honk(self):
		return "빠밤"
hyundai = Car("현대", "제네시스", 500)
hyundai.honk()
>"빠밤"
  • 이렇게 객체에서 메소드를 사용할때는 dot(.)을 사용하여 개체를 호출하며 이를 dot nation이라고 한다.
<객체>.<메소드>

-honk메소드에서 해당객체의 회사 정보를 알기 위해서는 __init__메소드에서 self객체에 해당 정보들을 저장해 놓았기 때문에 다음처럼 사용한다.

def honk(self):
	return f"{self.maker} 빠밤"
  • class 는 언제 쓰나요?
    클래스를 사용하면 코드의 구조를 더 효과적으로 구현할 수 있으며 이렇게 코드를 클래스 위주로 작성하는 것을 object oriented programming(객체 지향 프로그래밍)이라고 한다.

0개의 댓글