파이썬 기초 | 객체(인스턴스), 클래스, 생성자, 상속 개념 | 다양한 메소드 | __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

    댓글