Python #19 l 파이썬 날개달기_클래스(Class)

신승호·2021년 3월 25일
0

Python

목록 보기
20/35
post-custom-banner

List

  • 파이썬 날개달기
    • 클래스(class)
    • 모듈(module)
    • 패키지(package)
    • 예외처리(exception)
    • 내장함수
    • 라이브러리(library)
    • 연습문제

파이썬 날개달기_클래스(Class)


클래스(Class)를 사용하여 계산기 만들기

  • 계산기를 활용할 때 3 + 4 를 더했을 때 결과값으로 7이 나온다. 그리고 다시한번 + 3을 하면 기존 결과값인 7에 3을 더해 10을 나타낸다.
  • **계산기는 이전에 계산한 결괏값을 저장해 놓아야 한다.

계산기와 동일한 파이썬 형식

result = 0
def add(num):
    global result		# 이전에 계산한 결괏값을 유지하기 위해서 전역변수인 global을 사용	
    result += num 		# result = result + num 이다.
    return result

print(add(3))
print(add(4))
**위의 add 함수는 매개변수 num에 받은 값을 이전에 계산한 결괏값에 더한 후 돌려주는 함수이다.

계산기 2개의 함수

result1 = 0
result2 = 0

def add1(num):
    global result1
    result1 += num
    return result1

def add2(num):
    global result2
    result2 += num
    return result2

print(add1(3))
print(add1(4))
print(add2(3))
print(add2(7))

클래스를 사용한 계산기 형식

class Calculator:
    def __init__(self):			 # 이게 이해가 안되네.. 
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()
cal2 = Calculator()

print(cal1.add(3)) # 객체 1
print(cal1.add(4)) # 객체 2
print(cal2.add(3))
print(cal2.add(7))

**계산기 대수가 늘어도 객체를 추가하면 되는거라 아주 쉽다 쉬워.
**뺴기 기능을 추가하려면 아래와 같은 함수를 추가하면 된다.
def sub(self, num):
    self.result -= num
    return self.result

클래스와 객체

클래스(class)

  • 똑같은 무엇인가를 계속 만들어 낼수 있는 설계 도면(쿠키의 틀)
  • 클래스 1개엄청나게 많은 객체를 만들 수 있다.

객체(object)

  • 클래스로 만든 피조물(쿠키 틀로 만든 과자)
  • 고유한 성격을 가진다
  • 객체들은 서로 전혀 영향을 주지 않는다.

파이썬 클래스의 가장 간단한 예

>>> class Cookie:
>>>    pass

>>> a = Cookie()
>>> b = Cookie()
** Cookie()의 결괏값을 돌려받은 a와 b가 바로 객체이다. 

***객체와 인스턴스의 차이

  • 둘은 동일하지만 사용법이 조금 다름
  • a 는 ‘객체’이며,
  • a 는 Cookie의 ‘인스턴스’이다

클래스의 사칙연산

사칙연산을 위한 메서드

  • 먼저 사칙연산을 할 때 사용할 2개의 숫자를 먼저 알려주어야 함.
  • 아래와 같이 연산을 수행할 대상(4, 2)을 객체에 지정하는 하는 방법
>>> a = FourCal()
>>> a.setdata(4, 2)
>>>class FourCal:
	def setdata(self, first, second):	# ① 메서드의 매개변수
		self.first = first		# ② 메서드의 수행문
		self.second = second		# ② 메서드의 수행문
  • setdata 메서드에self, first, second 총 3개의 매개변수가 필요한데 실제로는 a.setdata(4, 2)처럼 2개 값(4, 2)만 전달했다.
  • a.setdata(4, 2)처럼 호출하면 setdata 메서드첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.
  • 여기서 파이썬 매소드의 첫 번째 매개변수 이름은 관례적으로 self를 사용하며, 물론 다른 이름사용해도 된다.
>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.first)
4
>>> b = FourCal()
>>> b.setdata(3, 7)
>>> print(b.first)
3
>>> print(a.first) 		# a 객체의 first 값은 b 객체의 first 값에 영향받지 않고 원래 값을 유지
4

다른 형태로 매소드 호출하기

  • 클래스 이름.함수(a,b,c) 형태로 호출할 때는 객체 a에 첫 번째 매개변수 self를 꼭 전달해 주어야 한다.
>> a = FourCal()
>> FourCal.setdata(a, 4, 2) 	

사칙연산의 더하기 기능

  • 더하기 기능을 위한 클래스 세팅
class FourCal:
	def setdata(self, first, second): 
	self.first = first
	self.second = second
    
	def add(self):				# add메서드의 매개변수는 self
	result = self.first + self.second	# result = a.first + a.second
	return result				# 반환값은 result
>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.add())
6 
  • 풀이
class FourCal:					#  a = FourCal()
	def setdata(a, 4, 2):			# a.setdata(4, 2)
		a.4 = 4
		a.2 = 2
	def add(self):                     
		6 = 4(=a.4) + 2(=a.2)
		return 6

>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.add())
6 

생성자(constructor)

__init__

  • 객체가 생성될 때 자동으로 호출되는 메서드

객체에 초깃값을 설정해야 할 필요가 있을 떄 setdata와 같은 메서드를 호출해서 초깃값을 설정하는것 보다는 생성자를 구현하는게 안전하다.

  • def setdata를 사용했을 때
>>> a = FourCal()
>>> a.setdata(4, 2) 		# 먼저 초깃값을 세팅해 놓아야함
  • 생성자(constructor)를 사용했을 떄
>>> a = FourCal(4, 2) 		# 객체 생성시 자동으로 호출 시킴
>>> print(a.first)
4
>>> print(a.second)
2

클래스의 상속

상속((Inheritance)

  • 기존 클래스의 기능을 다른 클래스의 이름으로 물려받게 하는 것
    보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.

  • 기본 구조class 클래스 이름``(상속할 클래스 이름)

>>> class MoreFourCal(FourCal):
  • 기존 FourCal 클래스의 사칙연산 기능에 제곱 기능 추가
>>> class MoreFourCal(FourCal):
		def pow(self):
		result = self.first ** self.second
		return result

클래스 오버라이딩( Overriding, 덮어쓰기)

오버라이딩(Overriding, 덮어쓰기)

  • 클래스의 상속과 거의 똑같음

  • 하지만 상속했을 때 기존 클래스에 있던 메서드를 동일한 이름으로 다시 만드는 것(수정해 주는것)이라고 생각하면됨

>>> class SafeFourCal(FourCal):
		def div(self):
			if self.second == 0:  # 나누는 값이 0인 경우 0을 리턴하도록 수정
				return 0
			else:
				return self.first / self.second
>>> a = SafeFourCal(4, 0)
>>> a.div()
0

클래스 변수

클래스 변수의 기본구조

  • 클래스이름. 클래스변수
>>> class Family:
		lastname = "김"
>>>print(Family.lastname)
김
>>> a = Family()
>>> b = Family()
>>> print(a.lastname)
김
>>> print(b.lastname)
김
>>> Family.lastname = "박"
>>> print(a.lastname)
박
>>> print(b.lastname)
박
profile
신승홉니다
post-custom-banner

0개의 댓글