파이썬 기초 | 객체(인스턴스), 클래스, 생성자, 상속 개념 | 다양한 메소드 | __init__() | __del__() | __add__()

728x90

 

 

1. 객체(Object)의 개념 

: 어떤 속성과 행동을 가지고 있는 데이터 

: 수많은 사물을 프로그래밍 관점에서 객체라고 부름

: 인스턴스(Instance) 라고 부르기도 함

 

거북이 객체

import turtle 
turtle.shape("circle")  # 거북이를 원 모양으로 설정
turtle.shape()  # 거북이의 현재 모양 확인
turtle.goto(100,100)  # 거북이의 좌표 이동
turtle.xcor()   # 거북이의 현재 X좌표 확인
turtle.ycor()   # 거북이의 현재 Y좌표 확인

 

▶ 문자열 객체

myStr = "FirstMyLife"  # 문자열 객체에 값을 대입
myStr.upper()   # 문자열 객체를 대문자로 변환
myStr.count('i')   # 문자에서 i가 몇 번 나왔는지 셈
myStr.isalpha()   # 문자열 객체가 모두 영문자로 이루어졌는지 체크

 

 


2.  클래스와 객체의 관계

 

* 클래스

: 객체를 만들기 위한 설계도 또는 찍어내는 을 의미함

 

[토끼 클래스 생성해보기]

→ 토끼 클래스는 파이썬에서 제공하지 않으니 직접 한 번 만들어보자!

 

* 클래스를 만들기 위한 형식

class 클래스명 :
	# 클래스 생성코드 구현

 

 

[연습문제_깡충깡충 뛰어다니는 토끼 만들기]

* 토끼 클래스에 필요한 속성과 행동

√ 속성(변수) : 토끼의 모양, X,Y의 위치 → 변수로 생성

√ 기능(행동): 이동하기( )  → 함수(메소드)로 구현

class Rabbit :
    
    # 토끼의 속성(변수)
    모양 = ""   # 토끼 모양
    X위치 = 0   # X위치
    Y위치 = 0   # Y위치
    
    # 토끼의 행동(메소드)
    def goto(self,x,y) :  # 토끼를 이동할 좌표로 이동시키는 코드
        self.xPos = x
        self.yPos = y

# 토끼 객체화
rabbit1 = Rabbit()
rabbit2 = Rabbit()
rabbit3 = Rabbit()

 

* 각 토끼(객체)는 별도의 속성과 메소드가 존재하므로 별도의  값을 대입

: 각각의 토끼는  객체이름.속성이름으로 접근 가능

: 각각의 토끼의 메소드는 객체이름.메소드이름() 형식을 사용

## 클래스 및 함수 선언부
class Rabbit :
    
    # 토끼의 속성(변수)
    모양 = ""   # 토끼 모양
    X위치 = 0   # X위치
    Y위치 = 0   # Y위치
    
    # 토끼의 행동(메소드)
    def goto(self,x,y) :  # 토끼를 이동할 좌표로 이동시키는 코드
        self.xPos = x
        self.yPos = y
        
## 전역변수 선언부
rabbit1 = None
userxX, userY = 0,0

## 메인코드
rabbit = Rabbit()
rabbit.shape = "토끼"

while True :
    userX = int(input("토끼가 이동할 X좌표 => "))
    userY = int(input("토끼가 이동할 X좌표 => "))
    rabbit.goto(userX, userY)
    print("**토끼의 현재 위치는 (",str(userX), ",", str(userY), ")")

 

 


3. 생성자와 특별한 메소드

 

* 생성자의 개념

: 객체를 생성하면 무조건 호출되는 메소드를 의미

: 객체를 생성하면 변수의 값을 초기화하는 메소드

: 생성자로 초기화를 하면 코드가 간결해짐

: 생성자는 클래스 안에서 __init__() 라는 이름으로 지정되어 있음

※  __init__()은 앞뒤에 언더바(_)가 2개씩 있음. init은 Initialize의 약자로 초기화한다는 의미를 가짐

class 클래스명 :
	def __init__(self) :
    # 초기화할 코드 입력

 

▶ 생성자의 형태

class Rabbit : 
    shape = "" # 토끼 모양 
    xPos = 0   # X위치 
    yPos = 0   # Y위치
    
    def __init__(self) : 
        self.shape = "토끼"
        
    def goto(self, x, y) : 
        self.xPos = x 
        self.yPos = y
        
rabbit = Rabbit()  # 토끼 객체 생성 
print('rabbit의 모양:', rabbit.shape)

 

 

[연습문제_대문자는 소문자로, 소문자는 대문자로 만드는 class 만들어보기(1)]

class replace :
    def __init__(self, str) :
        self.str = str
    
    def replace1(self) :
        result = self.str.upper()
        return result

    def replace2(self) :
        result = self.str.lower()
        return result
    
str1 = replace("dkdkdkdkdkdk")
str1.replace1()
str1.replace2()

 

 

[연습문제_대문자는 소문자로, 소문자는 대문자로 만드는 class 만들어보기(2)]

class replace :
    def __init__(self) :
        pass
    
    def replace1(self, str) :
        return str.upper()

    def replace2(self,str) :
        return str.lower()
    
result = replace()     
print(result.replace1("abcd"))
print(result.replace2("ABCD"))

 

 

▶ 매개변수가 있는 생성자

class Rabbit :
    shape = ""
    xPos = 0
    yPos = 0
    
    def __init__(self, value) :    # 매개변수가 1개 들어감
        self.shape = value
        
    def goto(self, x, y) : 
        self.xPos = x
        self.yPos = y
        
rabbit1 = Rabbit("원")
print("rabbit1의 모양: ", rabbit1.shape)

rabbit2 = Rabbit("삼각형")
print("rabbit1의 모양: ", rabbit2.shape)

rabbit3 = Rabbit("토끼")
print("rabbit1의 모양: ", rabbit3.shape)

 

▶ __del__() 메소드

: __init__() 메소드가 생성자라면 __del()__ 메소드는 소멸자라고 부름

: __del__() 은 객체가 제거될 때 자동으로 호출됨

class Rabbit : 
    shape = "" 
    def __del__(self) : 
        print("이제", self.shape, "는 자유에요~~")

rabbit = Rabbit() 
rabbit.shape = "도비" 
del(rabbit)

 

▶ __add__() 메소드

: 객체끼리 덧셈을 할 경우에 실행되는 메소드

class Rabbit : 
    shape = "" 
    def __add__(self, other) : 
        print("객체", self.shape,"와", other.shape, "가 친구가 되었습니다.")

rabbit1 = Rabbit() 
rabbit1.shape = "엽기토끼" 
rabbit2 = Rabbit() 
rabbit2.shape = "도비"

rabbit1 + rabbit2

 

▶ 특별한 메소드

: 비교 메소드

→ 객체 사이의 비교 연산자가 사용될 때 호출되는 메소드

 

비교연산자 메소드
< __lt__()
<= __le__()
> __gt__()
>= __ge__()
== __eq__()
!= __ne__()

 

 


4. 클래스와 상속

 

* 상속의 개념

: 기존의 클래스가 가지고 있는 속성과 행동을 그대로 물려받는 새로운 클래스를 만드는 것을 의미

: 상속을 받은 이후에는 새로운 클래스에서 추가로 속성이나 행동을 만들어서 사용할 수도 있음

 

▶ 상속 구현하기

class 서브클래스(슈퍼클래스) :
	# 서브클래스 코드 구현

 

[연습문제_집토끼와 산토끼]

# 상속 구현하기
class Rabbit : 
    shape = "" 
    xPos = 0 
    yPos = 0 
    def goto(self, x, y) :
        self.xPos = x 
        self.yPos = y
        
class HouseRabbit(Rabbit) : 
    owner = "" 
    def eatFeed() : 
        print("집토끼가 모이를 먹습니다")
        
class MountainRabbit(Rabbit) : 
    mountain = "" 
    def eatWildgrass() : 
        print("산토끼가 들풀을 먹습니다")

              
# 서브 클래스 객체 생성
hRabbit = HouseRabbit()
mRabbit = MountainRabbit()

              
# 두 객체 사용하기              
hRabbit.shape = "원"
mRabbit.goto(100,100)

 

728x90

댓글