[Python] Class
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가 아닌 SafeFourCal
의 div
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
Leave a comment