Jump to Python wikidocs - class를 보고 기억할 내용을 제 언어로 요약정리한 포스팅이라 표현 및 설명이 매끄럽지 않을 수 있습니다!

1. Class, Object, Instance

  • class: 과자 틀
  • object: 과자 틀에 의해서 만들어진 과자
    • 객체 만들어줄 때는 클래스명 뒤에 괄호 붙여주자!

      class Cookie:
        pass
      
      a = Cookie()
      
  • instance
    • a = Cookie()로 만들어진 a는 객체. 그리고 a 객체는 Cookie의 인스턴스
    • 즉, instance는 특정 객체(a)가 어떤 class(Cookie)의 객체인지 관계를 설명할 때 사용하는 표현
    • 객체와 인스턴스, 올바른 표현 알기!
      a는 인스턴스: X vs. a는 객체: O
      a는 Cookie의 객체: X vs. a는 Cookie의 인스턴스: O


2. Method

  • method: class 안에 구현된 함수
  • class에 포함되어 있다는 점만 제외하면 일반함수와 같은 기능
  • 첫번째 매개변수 이름은 관례적으로 self 사용. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self 사용
class FourCal:
  def setdata(self, first, second):
    self.first = first
    self.second = second


3. Object Variable (객체변수)

  • object variable: 객체에 생성되는 객체만의 변수
    ex) a.first = 4 문장 수행시, a 객체에 객체변수 first가 생성되고 값 4가 저장됨
a = FourCal()
a.setdata(4,2)

print(a.first)    # 4
print(a.second)   # 2


4. class structure

class FourCal:
    def __init__(self, first, second):
        self.first = first
        self.second = second
    def setdata(self, first, second):
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result


5. Constructor (생성자)

  • __init__을 사용하면 매번 setdata 메서드를 수행하지 않고, 객체에 객체변수의 초깃값을 설정할 수 있도록 해준다.
  • 즉, Constructor란 객체가 생성될 때 자동으로 호출되는 메서드를 의미
a = FourCal()
a.setdata(4,2)
a.add()   # 6

위 코드처럼 setdata 메소드를 호출할 필요없이 아래 코드처럼 객체를 선언하면서 객체변수의 초깃값 설정 가능.

a = FourCal(4,2)
a.add()   # 6


6. class Inheritance (상속)

  • 상속을 하는 이유
    • 기존 class를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하고자 할 때 사용
    • 기존 class가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황일 때 사용
class MoreFourCal(FourCal):
  def pow(self):
    result = self.first ** self.second
    return result
a = MoreFourCal(4, 2)
a.pow()   # 16


7. Method Overriding

  • Method Overriding(덮어쓰기): 부모 class에 있는 method를 동일한 이름으로 다시 만드는 것
  • method overriding을 하면 부모 class의 method 대신 overriding한 method가 호출된다
a = FourCal(4, 0)
a.div()

----------------------------------------
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    result = self.first / self.second
ZeroDivisionError: division by zero

ZeroDivisionError: division by zero 에러가 나오지 않도록 div method 수행시 나누는 값이 0인 경우에는 0을 return하도록 method를 구현해주자.

class SafeFourCal(FourCal):
  def div(self):
    if self.second == 0:
      return 0
    else:
      return self.first / self.second
a = SafeFourCal(4, 0)
a.div()   # 0

FourCal class의 div method가 아닌 SafeFourCaldiv method가 호출되어 ZeroDivisionError 에러가 발생하지 않고 0이 잘 return 되었다.


8. Class Variable (클래스 변수)

  • class variable는 class로 만든 모든 객체에 공유된다.
class Family:
  lastname = 'Kim'

print(Family.lastname)    # Kim

a = Family()
b = Family()

print(a.lastname)   # Kim
print(b.lastname)   # Kim

Family class의 lastname을 ‘Park’으로 바꾸면 모든 객체의 lastname도 ‘Park’으로 바뀐다.

Family.lastname = 'Park'

print(a.lastname)   # Park
print(b.lastname)   # Park

만약 a.lastname을 바꾸면 해당 객체의 객체변수가 새롭게 생성되어 이제는 a.lastname은 Family class의 lastname이 아닌 객체 a의 객체변수 lastname을 가리키게 된다.

a.lastname = 'Lee'

print(a.lastname)       # Lee

print(Family.lastname)  # Park
print(b.lastname)       # Park


Reference


Tags:

Categories:

Updated:

Leave a comment