클래스(설계도)
- 모델링 : 클래스를 작성하는 것
- 인스턴스 : 클래스로 만든 객체
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list1
과 list2
는 list
라는 클래스로 만들어졌습니다.
list1
과 list2
는 서로 다른 인스턴스입니다.
클래스 외부에 메소드 생성
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 )
상속
- 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것
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)
- 같은 이름을 가진 메소드를 덮어 쓴다는 의미
Human
과 Dog
클래스는 Animal
의 greet
메소드를 상속받지만 오버라이드
를 통해서 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 )
self.hand = hand
person = Human( "사람", "오른손" )