Skip to content

Latest commit

 

History

History
115 lines (78 loc) · 3.12 KB

2022.07.10.md

File metadata and controls

115 lines (78 loc) · 3.12 KB

코드잇/객체지향 프로그래밍


클래스와 인스턴스

파이썬에서 클래스를 정의하는 방법은 다음과 같다.

class User:
    pass  #속성이나 행동 정의 없이 빈 클래스임

user1 = User()
user2 = User()

여기서 user1, user2는 각각이 인스턴스, 객체가 된다. 이들은 모두 User Class로 만들어졌지만 서로 다른 존재라는 특징이 있다.


인스턴스 메소드


메소드에는 3가지 종류 - 인스턴스 메소드, 클래스 메소드, 정적 메소드 - 가 있는데, 이 중 인스턴스 메소드는 인스턴스의 변수을 사용하거나 인스턴스 변수를 바꾸는 역할이 포함된 메소드이다.

class User:
    def say_hello(some_user):
        print("안녕하세요 저는 {}입니다!".format(some_user.name))

user1 = User()

user1.name = '김철수'

User.say_hello(user1)

실행결과

안녕하세요 저는 김철수입니다!

또한 인스턴스 메소드에는 특별한 규칙이 있는데, 바로 클래스.메소드 로 호출하지 않고 인스턴스.메소드로 호출했을 때 첫 번째 파라미터는 자동으로 인스턴스가 된다는 것이다.

class User:
    def say_hello(some_user):
        print("안녕하세요 저는 {}입니다!".format(some_user.name))

user1 = User()

user1.name = '김철수'

user1.say_hello()

이 코드가 위의 코드와 완전히 동일한 기능을 한다는 뜻이다.

그래서 python 에서는 첫 번째 파라미터의 이름을 항상 self로 저장하는 것을 권장한다.

특수 메소드


__init__

특수 메소드는 특정 상황에서 자동으로 호출되는 메소드를 의미한다. init 메소드도 그 중 하나인데, init의 경우에는 '인스턴스가 생성될 때' 자동으로 호출된다. 그러면 처음 인스턴스를 생성할 때 괄호 안에 파라미터를 init 메소드의 파라미터에 넣을 것으로 상정하고 넣으면 된다.


클래스 변수


클래스 변수는 한 클래스로부터 생성된 모든 인스턴스들이 공유하는 변수라고 보면 된다.

class User:
    count = 0

    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password

        count += 1

user1 = User("김철수", "Cheolsoo@codeit.kr", "1234")
user2 = User("홍길동", "Gildong@codeit.kr", "2345")

print(count)

실행결과는 2다.

한 가지 주의해야 할 점으로, 같은 이름의 클래스 변수와 인스턴스 변수가 있다면 호출할 때 인스턴스 변수가 우선된다.


데코레이터 함수


def print_hello():
    print("hello!")

def add_startend(original):
    def wrapper():
        print("it starts!")
        original()
        print("it ends!")
    return wrapper

add_startend(print_hello)()

위의 코드는 print_hello 함수를 꾸며주는 add_startend함수를 이용한 코드이다. 이렇게 이미 주어진 함수를 활용해서 새로운 함수를 만들어주는 함수를 데코레이터 함수라고 한다.