Python - 클래스, 속성, 메소드
>클래스
클래스는 객체(object)를 표현하기 위한 문법이다.
클래스 사용하기
파이썬에서 클래스를 사용할때 클래스의 이름은 항상 대문자로 시작해야 한다.
특히 메소드의 첫 번째 매개변수는 반드시 self
를 지정해야 한다.
지금까지 사용한 int, list, dict, 자료형
등도 사실 클래스이다.
# 입력
class Person: # 클래스 이름은 항상 대문자로!
def greeting(self): # 첫 번째 매개변수는 self를 지정한다.
print('Hello')
jacob = Person() # 인스턴스 생성, 클래스에 괄호를 붙인 뒤 변수에 할당
jacob.greeting() # 메소드를 호출
# 출력
Hello
Person
으로 변수 jacob
을 만들었는데 여기서 jacob
이 Person
의 인스턴스(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명 생성되었습니다.
Author And Source
이 문제에 관하여(Python - 클래스, 속성, 메소드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jacoblee19/Python-클래스-속성-메소드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)