클래스
객체를 표현하기 위한 문법
일반적으로 우리가 쓰던 클래스는 int,list,dict가 있었다.
자료형도 클래스.
James가 Person의 인스턴스
-> 클래스는 특정 개념의 표현 뿐, 사용을 위해서는 인스턴스가 필요.
>>> class Person:
def greeting(self):
print('Hello')
>>> james = Person()
메서드 호출하기
메서드는 클래스가 아닌 인스턴스를 통해 호출
인스턴스.메서드()
>>> james.greeting()
Hello
빈 클래스 만들기
class 클래스이름:
pass
>>> class Person:
pass
>>> james = Person()
특정 클래스의 인스턴스인지 확인
>>> isinstance(james, Person)
True
속성 사용하기
class 클래스이름:
def __init__(self):
self.속성 = 값
-> 속성을 만들 때는 __init__메서드 안에서 self 속성에 값 할당.
->init 메서드는 클래스에 ()를 붙여서 인스턴스를 만들 때 호출되는 특별한 메서드
-> 인스턴스를 초기화
-> self는 자기 자신을 의미
>>> class Person:
def __init__(self):
self.hello = '안녕하세요.'
def greeting (self):
print(self.hello)
>>> james = Person()
>>> james.greeting()
안녕하세요.
인스턴스 만들 때 값 받기
>>> class Person:
def __init__(self, name, age, address):
self.hello = '안녕하세요'
self.name = name
self.age = age
self.address = address
def greeting(self):
print('{0} 저는 {1}입니다.'.format(self.hello, self.name))
>>> maria = Person('마리아', 20, '서울시 서초구 반포동')
>>> maria.greeting()
안녕하세요 저는 마리아입니다.
>>> print('마리아: ', maria.name)
마리아: 마리아
>>> print('이름 : ', maria.name)
이름 : 마리아
>>> print('나이 : ', maria.age)
나이 : 20
>>> print('주소 : ', maria.address)
주소 : 서울시 서초구 반포동
인스턴스를 생성한 뒤에 속성 추가도 가능.
>>> class Person:
pass
>>> maria = Person()
>>> maria.name = '마리아'
>>> maria.name
'마리아'
비공개 속성 사용하기
공개속성 -> 클래스 바깥에서 접근 가능.
비공개속성 -> 클래스에서만 접근 가능
메서드의 이름이 __(밑줄 두개)로 시작하면 비공개 메서드
>>> class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
self.__wallet = wallet
def pay(self, amount):
self.__wallet -=amount
print('이제 {0}원 남았네요.'.format(self.__wallet))
>>> maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
>>> maria.pay(3000)
이제 7000원 남았네요.
클래스 속성 사용하기
클래스 속성은 클래스에 속해 있으며 모든 인스턴스에 공유해야함.
클래스 속성 -> 모든 인스턴스가 공유. 인스턴스 전체가 사용해야 하는 값을 저장할 때 사용.
인스턴스 속성 -> 인스턴스 별로 독립되어 있음 . 각 인스턴스 값을 따로 저장해야 할 때 사용.
>>> maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
>>> maria.pay(3000)
이제 7000원 남았네요.
>>> class Person:
bag = []
def put_bag(self, stuff):
self.bag.append(stuff)
>>> james = Person()
>>> james.put_bag('책')
>>> maria = Person()
>>> maria.put_bag('열쇠')
>>> print(james.bag)
['책', '열쇠']
>>> print(maria.bag)
['책', '열쇠']
비공개 클래스 속성 사용하기
>>> class Knight:
__item_limit = 10
def print_item_limit(self):
print(Knight.__item_limit)
>>> x = Knight()
>>> x.print_item_limit()
10
>>> print(Knight.__item_limit) # 클래스 바깥에서는 접근할 수 없음
Traceback (most recent call last):
File "<pyshell#88>", line 1, in <module>
print(Knight.__item_limit)
AttributeError: type object 'Knight' has no attribute '__item_limit'
정적 메서드 사용하기
>>> class Calc:
@staticmethod
def add(a, b):
print(a+b)
@staticmethod
def mul(a, b):
print(a*b)
>>> Calc.add(10, 20)
30
>>> Calc.mul(10, 20)
200
클래스에서 바로 메서드 호출하기
정적 메서드는 self를 받지 않으므로 인스턴스 속성에 접근 불가능.
정적 메서드는 인스턴스 속성, 메서드가 필요 없을때 사용.
>>> Calc.add(10, 20)
30
>>> Calc.mul(10, 20)
200
클래스 메서드 사용하기
>>> class Person:
count = 0
def __init__(self):
Person.count += 1
@classmethod
def print_count(cls):
print('{0}명 생성되었습니다.'.format(cls.count)) #cls로 클래스 속성에 접근
>>> james = Person()
>>> maria = Person()
>>> Person.print_count()
2명 생성되었습니다.
'동아리' 카테고리의 다른 글
파이썬 예외 처리 (0) | 2020.09.07 |
---|---|
파이썬 클래스 #2 (0) | 2020.09.04 |
파이썬 함수 #2 (0) | 2020.08.31 |
파이썬 함수 (0) | 2020.07.10 |
백준 for & while문 (0) | 2020.07.08 |