python 클래스
파이썬에서 거의 모든 것이 객체이다
객체를 다루기 위해서는 -- 클래스를 알고있어야한다
클래스 생성
class Pokemon:
pokemon_a = "pikacu"
클래스 생성하게 되면 클래스의 속성에 접근할 수 있다
Pokemon.pokemon_a # => 'pikachu'
함수를 클래스 내에서 선언 가능 -- 클래스 내에서 작동하게 되는 함수 == 메서드
class Pokemon:
pokemon_a = "pikachu"
def print_pika():
print("hello pika")
^ 클래스 내에서 함수선언하기
pokemon.print_pika()
** 클래스의 인스턴스를만들땐 위 함수를 인스턴스에 활용은 안됨
-- > 인스턴스에서 해당 메서드 실행 시, 자신을인수로 넘겨주게 되기 때문
--> 아래 같이 함수 작성해야 인스턴스 활용 가능
class Pokemon:
pokemon_a = ' pikachu'
def print_pika(self):
print('pika')
self
인스턴스에서 메서드나 특성을 사용할 때 첫번째 인수, 파라미터로 넘겨지고 받아져야함
포켓몬 클래스 활용해 인스턴스 만들고 프린트 핖카 메서드 불러오기
poke_a = Pokemon()
poke_a.print_pika() #=> 'pika'
함수 호출할 때 아무런 인수 넘기지 않앗다- 그냥 함수 실행
메소드 내에서 파라미터 self 설정
파이썬에서 인스턴스가 메서드나 특성 사용할 때 그 인스턴스 참조값 넘기지만 자동으로 받지는 않음
<생성자 함수 > = 클래스가 인스턴스화 될 때 사용되는 함수
새로운 인스턴스 생성 시, 생성자 함수 정의되어있지 않은 경우 , 파이썬 기본 생성자 함수 사용
class Pokemon:
def __init__(self, pokemon_a='pikachu'):
self.pokemon_a = pokemon_a
poke_a = Pokemon()
print(poke_a.pokemon_a) #=> 'pikachu')
클래스 기반으로 생성되는 인스턴스는클래스 의 생성자 함수에 따라 인스턴스 초기 속성들을 받을 수 있다
클래스 자체에서는 속성 접근 힘들다
클래스 특별 메소드
클래스 생성할 때 생성자 함수 , __init_ 사용
@property
파이썬 - 클래스 만들고 해당 클래스 특성 설정
사람의 이름 , 성 입력받고 연결해 풀네임 만드는 특성의 클래스 만들기
class Person:
def __init__ (self, first_name, last_name):
self.first_name = first_name
self.last_name= last_name
self.full_name= self.first_name + ' ' + self.last_name
클래스 사용해 실행
fred = Person('Fred', ' Williamns')
print(fred.first_name)
print(fred.last_name)
print(fred.full_name)
하지만 fred 변경해도 출력이 그대로이다
@property 사용하기
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return self.first_name + ' ' + self.last_name
full_name 메소드 바로 위에 적으면 해당 메소드를 클래스의 특성처럼 접근 할 수 있다
@ property 사용하면 클래스 특성으로 만들어 주기도 하지만, 해당 특성을 가져오거나 값 설정할 때 사용하는 메소드를 섬서하게 관리할 수 있다
< getter, setter >
full_name 설정하게 되면 first_name 바꾸는 방법
@property를 사용하게 되면 클래스의 특성으로 만들어주는 것 + 해당 특성 가져와 값 설정할 때 사용하는 메소드 통해 섬세한 관리
getter란 어떤 것을 가져올 때 사용
@ property 설정 했을 때 어떻게 가져올지 정해졌으니 별도 설정 안해두 됨
setter란 값 설정해주는 행동
값 설정해주는 행동이기 때문에 별도 메소드 만들어 준다
class Person:
def __init (self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name (self):
return self.first_name + ' ' + self.last_name
@full_name.setter
def full_name (self, new_full_name):
first_name, last_name = new_full_name.split()
self.first_name = first_name
self.last_name = last_name
@property 통해 메소드를 특성 취급
특성 만들고 , setter 설정할 수 있다
@full_name.setter는 그저 full_name 변경할때 어떻게 바꾸는지 알려주는 함수
결과 확인
fred = Person('Fred', 'Williams')
print(fred.first_name)
print(fred.full_name)
fred.full_name
print(fred.first_name)
print(fred.last_name)
print(fred.full_name)
_ 와 _
__init__ 밑줄 표시?
변수나 함수에 특별의미 부여할 대 사용
생성자 함수는 클래스 통해 인스턴스 생성하게 해주는 특별한 용도의 함수, 따라서 밑줄 붙여준다
single underscore
파이썬 클래스 내부에서 따로 변수나 값 저장할 때 사용
double underscore
파이썬 클래스 내부에서만 관리하도록 밑줄 두개 사용