Python - 클래스, 속성, 메소드

11542 단어 classpythonclass

>클래스

클래스는 객체(object)를 표현하기 위한 문법이다.

클래스 사용하기

파이썬에서 클래스를 사용할때 클래스의 이름은 항상 대문자로 시작해야 한다.
특히 메소드의 첫 번째 매개변수는 반드시 self를 지정해야 한다.
지금까지 사용한 int, list, dict, 자료형등도 사실 클래스이다.

# 입력
class Person:			# 클래스 이름은 항상 대문자로!
    def greeting(self):		# 첫 번째 매개변수는 self를 지정한다.
    	print('Hello')

jacob = Person()		# 인스턴스 생성, 클래스에 괄호를 붙인 뒤 변수에 할당

jacob.greeting()		# 메소드를 호출

# 출력
Hello

Person으로 변수 jacob을 만들었는데 여기서 jacobPerson인스턴스(instance)이다.

jacob = Person()

클래스는 특정 개념을 표현만 할뿐 사용을 하려면 인스턴스를 생성해야 한다.

메소드는 클래스가 아니라 인스턴스를 통해 호출해야 한다.

jacob.greeting()

인스턴스를 통해 호출하는 메소드를 인스턴스 메소드라고 부른다.

인스턴스와 객체의 차이점

사실 인스턴스와 객체는 같은 뜻이다.
보통 객체만 지칭할 때는 그냥 객체(object)라고 부르지만 클래스와 연관 지어서 말할때는 인스턴스(instance)라고 부른다.
예를 들어 리스트 변수 a, b가 있다고 하면 a, b는 객체이다.
그리고 a와 b는 리스트 클래스의 인스턴스이다.

클래스의 속성

클래스에 인스턴스 속성을 만들 때는 __init__ 메소드 안에서 self.속성에 값을 할당해준다.

# 입력
class Person:
    def __init__(self):
        self.hello = '안녕하세요.'

    def greeting(self):
        print(self.hello)

jacob = Person()
jacob.greeting()

# 출력
안녕하세요.

__init__ 메소드는 jacob = Person()처럼 클래스에 괄호를 붙여서 인스턴스를 만들 때 호출되는 특별한 메소드이다. 즉, __init__(initialize)라는 이름 그대로 인스턴스(객체)를 초기화한다.

이렇게 앞뒤로 __(밑줄 두 개)가 붙은 메소드는 파이썬이 자동으로 호출해주는 메소드인데스페셜 메소드(special method) 또는 매직 메소드(magic method)라고 부른다.

여기서 self는 인스턴스 자기 자신을 의미한다.

인스턴스를 만들 때 값 받기

__init__ 메소드에서 self다음에 값을 받을 매개 변수를 지정 한 다음self.속성에 넣어준다.

# 입력
class Person:
    def __init__(self, name, age, address):
        self.hello = '안녕하세요'
        self.name = name
        self.age = age
        self.address = address

    def greeting(self):
        print(f'{self.hello} 저는 {self.name}입니다.')

jacob = Person('이주형', 30, '서울특별시 은평구 응암동') # Person() 안에 이름, 나이, 주소를 콤마로 구분해서 넣은 뒤 변수에 할당.
jacob.greeting()

print('이름:', jacob.name)
print('나이:', jacob.age)
print('주소:', jacob.address)

# 출력
안녕하세요 저는 이주형입니다.
이름: 이주형
나이: 30
주소: 서울특별시 은평구 응암동

__init__ 메소드를 보면 self 다음에 name, age, address를 지정했다.
그리고 메소드 인에서는 self = name처럼 매개변수를 그대로 self에 넣어서 속성으로 만들었다.
클래스 안에서 속성에 접근할 때는 self.속성이지만 바깥에서 접근할 때는 인스턴스.속성 형식이다.
이렇게 인스턴스를 통해 접근하는 속성을 인스턴스 속성이라고 부른다.

정적 메소드와 클래스 메소드

정적 메소드와 클래스 메소드는 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있는 메소드이다.

정적 메소드는 self를 받지 않으므로 인스턴스 속성에 접근할 수 없다.
따라서 정적 메소드는 인스턴스 속성, 인스턴스 메소드가 필요 없을 때 사용한다.

정적 메소드는 메소드 위에 @staticmethod를 붙이며 매개변수에 self를 지정하지 않는다.

# 입력
class Calc:
    @staticmethod
    def add(a, b):
        print(a + b)

Calc.add(10, 20)

# 출력
30

클래스 메소드는 메소드 위에 @classmethod를 붙이며 매개변수에 cls를 지정한다.
클래스 메소드는 메소드 안에서 클래스 속성, 클래스 메소드에 접근해야 할때 사용한다.

# 입력
class Person:
    count = 0

    def __init__(self):
        Person.count += 1

    @classmethod
    def print_count(cls):
        print(f'{cls.count}명 생성되었습니다.')

jacob = Person()
sarah = Person()

Person.print_count()

# 출력
2명 생성되었습니다.

좋은 웹페이지 즐겨찾기