[Python] 클래스, 상속, 다형성

HYEOB KIM·2022년 8월 17일
1

Python

목록 보기
6/7

클래스(설계도)

  • 모델링 : 클래스를 작성하는 것
  • 인스턴스 : 클래스로 만든 객체
list1 = [1, 2, 3]
list2 = [1, 2, 3]
  • list1list2list라는 클래스로 만들어졌습니다.
  • list1list2는 서로 다른 인스턴스입니다.

클래스 외부에 메소드 생성

class Human():
	'''빈 클래스 작성'''

# 생성자 역할
def create_human(name, weight):
	person = Human()
    person.name = name
    person.weight = weight
    return person

# 외부에서 생성한 함수를 클래스의 메소드로 만드는 방법
Human.create = create_human

person = Human.create("철수", 60.5)

# 메소드 역할
def eat(person):
	person.weight += 0.1
    
# 메소드 역할
def walk(person):
	person.weight -= 0.1
    print("{}가 걸어서 {}kg가 되었습니다".format(person.name, person.weight))

# 외부에서 생성한 함수를 클래스의 메소드로 만드는 방법
Human.eat = eat
Human.walk = walk

person.walk()
person.walk()
person.eat()

클래스 내부에 메소드 생성

self

  • 메소드의 첫번째 인자
  • 인스턴스의 매개변수를 전달 할 때는 self 매개변수는 생략하고 전달
  • 메소드에 파라미터가 필요 없다면 self를 넣어줍니다.
  • JAVA의 this와 비슷한 역할
class Human( ):
	# 생성자
    def create( name, weight ):
        person = Human()
        person.name = name
        person.weight = weight
        return person

	# 메소드
    def eat( self ):
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))

	# 메소드
    def walk( self ):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))

person = Human.create("철수", 60.5)
person.eat()

특수한 메소드

초기화 함수(생성자)

  • __init__ : 인스턴스를 만들 때 실행되는 함수

문자열화 함수(출력 형식 지정)

  • __str__ : 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수
class Human( ):
    def __init__( self, name, weight ):
        self.name = name
        self.weight = weight

    def __str__( self )
        return "{} ( 몸무게 {}kg )".format( self.name, self.weight )
        
person = Human( "사람", 60.5 ) # 인스턴스 생성
print( person ) # 사람 ( 몸무게 60.5kg )

상속

  • 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것
class Animal( ):
    def walk( self ):
        print( "걷는다" )

    def eat( self ):
        print( "먹는다" )

class Human( Animal ):
    def wave( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def wag( self ):
        print( "꼬리를 흔든다" )
        
person = Human()
person.walk()
person.eat()
person.wave()

오버라이드(Override)

  • 같은 이름을 가진 메소드를 덮어 쓴다는 의미
  • HumanDog 클래스는 Animalgreet 메소드를 상속받지만 오버라이드를 통해서 greet 메소드를 재정의합니다.
class Animal( ):
    def greet( self ):
        print( "인사한다" )

class Human( Animal ):
    def greet( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def greet( self ):
        print( "꼬리를 흔든다" )
        
person = Human()
person.greet() # 손을 흔든다

dog = Dog()
dog.greet() # 꼬리를 흔든다

super()

  • 자식클래스에서 부모클래스의 내용을 사용하고 싶은 경우
  • 형식 : super().부모클래스내용
class Animal( ):
    def __init__( self, name ):
        self.name = name

class Human( Animal ):
    def __init__( self, name, hand ):
        super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
        self.hand = hand

person = Human( "사람", "오른손" )
profile
Devops Engineer

0개의 댓글