Python 기초 마지막

UICHEOL_HWANG·2023년 8월 18일

파이썬기초

목록 보기
11/12
  • 어떤 클래스를 만들 때 마다 다른 클래스의 기능을 물려 받을 수 있게 만드는 것
  • 기존 클래스에 기능을 추가하려 할 때
  • A클래스를 상속 받아 B클래스를 생성 한다고 할 때 , B클래스는 A클래스의 모든 기능을 사용할 수 있다.

𝑎𝑏��를 계산하는 MoreFourCal 클래스 만들기

객체지향 프로그래밍

1. class 사용하기

  • 클래스 = 자판기를 만드는 공장
  • 클래스 내부의 함수(메소드)는 자판기 1개
  • 계산기의 더하기 코드를 만드는데 기존의 값을 기억하고 있는 계산기 만들기

함수로 계산기 만들기

result1 = 0
result2 = 0 

def add1(num): #계산기 1 
    global result1 #global로 전역변수로 만듦 
    result1 += num 
    return result1 

def add2(num): #계산기 2
    global result2 #global로 전역변수로 만듦 
    result2 += num 
    return result2
print(add1(4))
print(add1(4))
7
8
print(add2(8))
12

클래스로 만들어주기

# 클래스로 계산기 만들기 

class Calculatior:
    def __init__(self):
        self.result = 0 
    def add(self,num):
        self.result += num 
        return self.result

cal1 = Calculatior()

cal1.add(2)
2
cal1.add(3)
5

cal2 = Calculatior()
cal2.add(1)
1

cal1.add(4)
9 #cal1이 5이니까

함수는 이 클래스가 의미하는 어떤 객체가 하는 다양한 동작을 정의할 수 있다. 만약 축구 선수라면, 등번호 교체라는 행동을 할 수 있고, 이를 다음과 같은 코드로 표현할 수 있다.

class SoccerPlayer(object):
	def change_back_number(self,new_number):
		print('선수의 등번호를 변경한다: from %d to %d"%(self.back_number,new_number)
		self.back_number = new_number

클래스 내에서의 함수도 기존 함수와 크게 다르지 않다. 함수의 이름을 쓰고 매개변수를 사용하면 된다. 여기서 가장 큰 차이점은 바로 self를 매개변수에 반드시 넣어야 한다는 것이다. self가 있어야만 실제로 인스턴스가 사용할 수 있는 함수로 선언된다.

2. __의 쓰임

  • 변수는 특별한 용도가 없으므로 뒤에서 사용되지 않는다. 따라서 를 임의의 변수명 대신에 사용한다.
  • 다른 용도로는 2개를 사용하여 특수한 예약 함수나 변수에 사용하기도 한다. 대표적으로 str 이나 init ( ) 같은 함수이다. str ( ) 함수는 클래스로 인스턴스를 생성했을 때, 그 인스턴스 자체를 print( ) 함수로 화면에 출력하면 나오는 값을 뜻한다. 다양한 용도가 있으니 의 특수한 용도에 대해서는 인지해 두는 것이 좋다

method

  • 메소드란? : 클래스 내부에 있는 함수
def setdata(self,frist,second): #메서드의 매개변수
    ___ self.first = first  # 메서드의 수행문
    ___ self.seconde = second  # 메서드의 수행문

사칙연산이 가능한 클래스 계산기 만들기

class FourCal:
    def setdata(self,first,second):
        self.first = first
        self.second = second
        print(self.first,self.second )
        
    def add(self):
        result = self.first + self.second
        return result 
    def sub(self):
        result = self.first - self.second
        return result 
    def mul(self):
        result = self.first - self.second
        return result 
    def div(self):
        result = self.first / self.second 
        return result

시작값을 setdata 함수 안에 넣어주며 first,second의 기본값을 넣어주면

하위 값인 나머지 add,sub,mul,div들이 setdata안에 입력된 값을 더해주거나 빼주는 연산기능을 만들어준다.


인스턴스 변수

  • 메소드를 통해 특정 변수를 만드는 것을 보고 인스턴스 변수라고 한다.

생성자

  • 클래스를 할당하면서 변수의 값을 바로 할당해주는 것
  • 더 정리해서 얘기하면, 객체에 first , second와 같은 초기 값을 설정해야 할 필요가 있을 때, setdata와 같은 메서드를 호출해서 초기값을 설정하는 것 보다, 생성자를 만들어서 객체를 생성할 때 값을 바로 받는 것이 더 좋다.
  • 생성자(constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미
  • class내 메서드명으로 init를 사용하면 그것이 생성자가 된다.
class FourCal:
    def __init__(self,first,second): # 생성자 
        self.first = first                # self.first 인스턴스 변수 
        self.second = second   #self.second 인스턴스 변수 
        
    
#     def setdata(self,first,second): # 인스턴스 변수 
#         self.first = first
#         self.second = second
#         print(self.first,self.second )
        
    def add(self):
        result = self.first + self.second
        return result 
    def sub(self):
        result = self.first - self.second
        return result 
    def mul(self):
        result = self.first * self.second
        return result 
    def div(self):
        result = self.first / self.second 
        return result

a = FourCal(2,3)
# 미리 값을 지정해줄 수 있다

클래스의 상속

  • 어떤 클래스를 만들 때 마다 다른 클래스의 기능을 물려 받을 수 있게 만드는 것
  • 기존 클래스에 기능을 추가하려 할 때
  • A클래스를 상속 받아 B클래스를 생성 한다고 할 때 , B클래스는 A클래스의 모든 기능을 사용할 수 있다.
ab를계산하는MoreFourCal클래스만들기a^b 를 계산 하는 MoreFourCal 클래스 만들기
class MoreFourCal(FourCal): # FourCal을 상속
    def pow(self):
        result = self.first ** self.second 
        return result

클래스 변수

class Family:
    lastname = '김'

Family.lastname
김

b = Family()
a.lastname
b.lastname
a.lastname = '박' #수정이 가능하다  #클래스 변수가 아닌 , 객체 변수를 따로 생성한 것이다.
Family.lastname = '최'
b.lastname
'최'

비공개 클래스 속성

__ (언더바 2개 )로 시작하면 비공개 속성이 된다.

class Knight:
    lastname='김'
    __item_limit = 10 
    
    def print_item_limit(self):
        print(Knight.__item_limit)

x = Knight()

x.lastname
김 

x.__item_limit()
# 접근 불가 

# 비공개 클래스는 메서드를 직접 접촉해야한다 
profile
개발 취미로 하는 세일즈맨

0개의 댓글