파이썬

python 클래스

막막한 2023. 5. 26. 15:19

파이썬에서 거의 모든 것이 객체이다 

 

객체를 다루기 위해서는 -- 클래스를 알고있어야한다 

 클래스 생성 

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

파이썬 클래스 내부에서만 관리하도록 밑줄 두개 사용