본문 바로가기

Python

파이썬(Python) 오버라이드(Override), SpecialMethod.

반응형

method override

  • 부모 클래스의 method를 재정의
  • 하위 클래스(자식 클래스)의 인스턴스 호출 시, 재정의된 메소드가 호출됨
class Person:
  def __init__(self, name, age): 
    self.name = name
    self.age = age

  def eat(self, food):
    print('{}은 {}를 먹습니다.'.format(self.name, food))

  def sleep(self, minutes):
    print('{}은 {}분 동안 잡니다.'.format(self.name, minutes))
  
  def work(self, minute):
    print('{}은 {}분 동안 일해요.'.format(self.name, minute))

class Student(Person):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    
  def work(self, minute):
    print('{}은 {}분 동안 공부합니다.'.format(self.name, minute))

class Employee(Person): 
  def __init__(self, name, age):
    self.name = name
    self.age = age 

  def work(self, minute):
    print('{}은 {}분 동안 일해요.'.format(self.name, minute))

lee = Student('이순신', 35) 
lee.eat('김밥')
lee.sleep(30)
lee.work(60)

kim = Employee('김상식', 33)
kim.eat('게장')
kim.sleep(387)
kim.work(123123123)

class Person:
  def __init__(self, name, age): 
    self.name = name
    self.age = age

  def eat(self, food):
    print('{}은 {}를 먹습니다.'.format(self.name, food))

  def sleep(self, minutes):
    print('{}은 {}분 동안 잡니다.'.format(self.name, minutes))
  
  def work(self, minute):
    print('{}은 {}분 동안 일해요.'.format(self.name, minute))


class Student(Person):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    
  def work(self, minute):
    super().work(minute)
    print('{}은 {}분 동안 공부합니다.'.format(self.name, minute))


class Employee(Person): 
  def __init__(self, name, age):
    self.name = name
    self.age = age 

  def work(self, minute):
    super().work(minute)
    print('{}은 {}분 동안 일해요.'.format(self.name, minute))

lee = Student('이순신', 35) 
lee.eat('김밥')
lee.sleep(30)
lee.work(60)

kim = Employee('김상식', 33)
kim.eat('게장')
kim.sleep(387)
kim.work(123123123)

class Person:
    def __init__(self, name, age): 
        self.name = name
        self.age = age

    def work(self, minute):
        print('{}은 {}분 동안 일해요.'.format(self.name, minute))


class Employee(Person):
    def work(self, minute):
        super().work(minute)  # 부모 클래스의 work() 메서드 호출
        print('{}은 {}분 동안 일하는 동안 업무를 처리합니다.'.format(self.name, minute))


kim = Employee('김상식', 33)
kim.work(60)

 


special method

  • __로 시작 __로 끝나는 특수 함수
  • 해당 메서드들을 구현하면, 커스텀 객체에 여러가지 파이썬 내장 함수나 연산자를 적용 가능

special method 리스트


'''
  Point
  2차원 좌표평면 각 점 (x, y)
  연산 - 두점의 덧셈, 뺄셈 (1, 2) + (3, 4) = (4, 6)
         한점과 숫자의 곱셈 (1, 2) *3 = (3, 6)

  위 연산이 special method에서 구현이 되어있음.

'''

class Point:
  def __init__(self, x, y):
    self.x = x 
    self.y = y

  def __str__(self):
    return '{}, {}'.format(self.x, self.y)

  def __add__(self, pt):
    new_x = self.x + pt.x
    new_y = self.y + pt.y 
    return Point(new_x, new_y)
                           
  def __sub__(self,pt):
     new_x = self.x - pt.x
     new_y = self.y - pt.y 
     return Point(new_x, new_y)

  def __mul__(self,pt):
     new_x = self.x * pt.x
     new_y = self.y * pt.y 
     return Point(new_x, new_y)

  def __len__(self):
    return self.x **2 + self.y **2

  def __getitem__(self, index):
    if index == 0:
      return self.x
    elif index ==1:
      return self.y
    else:
      return -1

food=[ "자장", "짬뽕", "탕수육, 군만두" ]
x = [1, 2, 3, 4]

p1 = Point(3, 4)
p2 = Point(2, 7)

print([1,2,3,4])
print(p1)
print(p2)

a = p1 + p2
b = p1 - p2
c = p1 * p2


print(a)
print(b)
print(c)
print(len(p1))

print(x[0])
print(x[1])
print(x[3])

 

반응형