본문 바로가기

동아리

파이썬 클래스

클래스

객체를 표현하기 위한 문법

일반적으로 우리가 쓰던 클래스는 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