본문 바로가기
AI월드/⚙️AI BOOTCAMP_Section 3

파이썬 함수(+생성자함수)와 클래스,개념정리_Day47(3)

by khalidpark 2021. 3. 12.

파이썬 함수

파이썬 함수 종류 - 내장함수(built-in functions) , 사용자 지정함수(user-defined functions)

 

함수 문법

def 함수_이름( 파라미터 ):
    "함수 문서"
    함수 내용
    return [표현식]

- 파라미터

함수에서 파라미터는 선택사항 (함수 정의할때 소괄호 안에 들어가는 것)

파라미터들은 위치에 따라 영향을 받음

따라서 순서를 지켜서 인수 (argument) 를 넘겨야 함

 

- 인수

함수를 실행할때 넘기는 것

 

1) 필수인수

def person_info(first_name, last_name):

    print(f"Hello {first_name}, {last_name}!")

 

person_info('musk','elon')

 

2) 키워드인수

person_info(last_name='elon', first_name='elon')

(필수 인수들을 전달하기만 하면 순서는 상관이 없음)

 

3) 기본인수

def person_data(name, type_p='human'):

    print(f"Hello {name}, you are {type_p}")

(type_p 인수를 넘기지 않게 되면 함수에서 기본값을 'human' 으로 정하게 됨)

(주의!!! 기본 값으로 설정된 파라미터들은 기본값이 없는 파라미터 뒤에 등장해야 함)

 

- return

함수에서 return을 따로 명시하지 않는 경우,

그렇게 되면 파이썬에서는 return None 을 기본세팅으로 취한다.

return 과 print 의 차이점
print 는 우리가 볼수있도록 단순 출력해주는 것. 값이 저장되지 않는다
return은 함수의 결과를 돌려준다

파이썬 클래스

파이썬의 클래스에서는 함수와 속성 두 가지를 전부 담을 수가 있습니다

함수를 클래스 내에서 선언을 하는 것도 가능

클래스 내에서 작동하게 되는 함수들은 메서드 (method) 라 부름

class Pokemon:
    pokemon_a = "pikachu"
    
    def print_pika():
        print("Hello Pika")

Pokemon.print_pika()
=>"Hello Pika"

클래스와 인스턴스

인스턴스는 정의된 클래스를 활용

아래에서 'p1'이 인스턴스

 

인스턴스는 클래스의 복제판? 확장판이라고 생각하면 되지않을까?

class Pokemon:
    pokemon_a = "pikachu"
    
    def print_pika():
        print("Hello Pika")

p1 = Pokemon()

print(p1.pokemon_a)
=> "pikachu"

위 상황하고 이어서 보면

Pokemon.print_pika()
=>"Hello Pika"

하지만

p1.print_pika()
=> TYPE ERROR

왜?

인스턴스를 통해 메서드를 실행하게 되면

인스턴스 본인을 넘기면서 실행됨

즉,

p1.print_pika() = Pokemon.print_pika(p1) 으로 인식되다보니

Pokemon 클래스 안 print_pika() 에 파라미터를 지정해주지않았지만 p1 이라는 파라미터값이 들어와서 에러발생

해결책은

class Pokemon:
    pokemon_a = "pikachu"

    def print_pika(self):
        print("Hello Pika")

* 꼭 'self'여야 하는냐?
** 상관없다. selfself도 되고 아무것도 상관없다
** 중요한건 p1 인스턴스가 파라미터자리로 넘겨오기때문에, 값을 지정해두어야 작동한다는 것

p1.print_pika()

=> "Hello Pika"

 


생성자 함수 , __init__

생성자 함수는 클래스가 인스턴스화 (instantiate) 될 때 사용되는 함수

 

class Pokemon:
    def __init__(self, name):
        self.name = name

poke_a = Pokemon()
=> 에러발생
==> name 값을 지정해주지 않았기 때문에
-------------------------------------------------------
class Pokemon:
    def __init__(self, name):
        self.name = name

poke_a = Pokemon('pikachu')
print(poke_a.name)
=> pikachu
-------------------------------------------------------
class Pokemon:
    def __init__(self, name='pikapika'):
        self.name = name

poke_a = Pokemon()
print(poke_a.name)
=> pikapika

 

주의사항

위는 인스턴스마다의 속성이지 클래스 전체에 대한 속성은 아님

Pokemon.name
=> AttributeError: type object 'Pokemon' has no attribute 'name'

 

 

728x90

댓글