티스토리 뷰
클래스란?¶
객체지향은 프로그래밍의 꽃이다.
클래스는 객체지향을 구현함에 있어 중요한 부분이다.
클래스는 비슷한 속성을 가진 객체를 묶는 큰 틀이라고 생각하면 된다.
클래스 변수¶
class Customer:
welcome = '반갑습니다'
클래스 Customer는 '반갑습니다'라는 값을 가진 welcome 라는 변수를 가지고 있다.
이를 호출하려고 하면 해당 클래스의 인스턴트를 통해서만 가능하다.
Customer.welcome
클래스 함수¶
class Customer:
def info(self, id):
print("id : %d" % id)
new_Customer = Customer()
new_Customer.info(2011251)
info 함수는 id를 입력값으로 받고 있는 클래스 함수이다.
self는 이 함수를 호출하는 객체가 이 클래스의 객체인지 확인하는 장치이다.
새로운 인스턴스 new_Customer을 생성한뒤, 2011251이라는 입력값을 주어 info함수를 출력하면 2011251을 리턴받고 있다.
class Customer:
welcome = "반갑습니다"
def info(self, id):
print("id : %d" % id)
new_Customer = Customer()
print(Customer.welcome)
new_Customer.info(2011251)
클래스 self¶
class Member:
def setId(self,id,password):
self.id = id
self.password = password
def getId(self):
print ('아이디(id) : %s, 비밀번호(password) : %d' % (self.id, self.password))
New_Member = Member()
New_Member.setId('JFun', 2011251)
New_Member.getId()
setId(self,id,password):
클래스 함수의 첫 번째 인수로 self를 써 줘야만 해당 함수를 인스턴스의 함수로 사용할 수 있게 된다.
self는 간단히 말하면 이 함수를 부르는 객체가 해당 클래스의 인스턴스인지 확인해 주기위한 장치이다.
하지만 단순히 확인하는 것에서 나아가 self를 이용하여 객체 내의 정보를 저장하거나 불러올 수 있다.
New_Member.setId('JFun', 2011251)
New_Member이라는 Member의 인스턴스를 이용하여 New_Member.setId('JFun', 2011251)를 수행하면 self.Id에는 'JFun'이 self.year에는 2011251값이 저장된다.
이때 self는 New_Member이라는 객체이다.
New_Member.getId()
New_Member 객체를 이용하여 getId함수를 호출하게 되면 위에서 설정한 self.Id와 self.password 값이 출력되는 것을 볼 수 있다.
즉, getId()라는 함수는 self를 통해서 New_Member에 해당하는 Id와 password를 리턴하게 된다.
클래스 init¶
Member클래스의 인스턴스를 추가해 getId()를 호출 할 때마다 setId()를 이용해 id와 password를 설정해줘야 한다.
이럴때 인스턴스 생성 초기에 변수를 지정해 주는 것을 도와주는 것이 init 함수 이다.
init 함수는 초기화메서드 혹은 생성자라고 불리며 이 함수의 인자들은 다음과 같이 인스턴스를 만들 때 함께 선언해주어야 한다
인스턴스 = 클래스 (변수1, 변수2, ...)
class Member:
def __init__(self, id, password):
self.id = id
self.password = password
print ("새로운 Member 인스턴스가 생성되었습니다.")
def getId(self):
print ("아이디(id) : %s, 암호(password): %d" % (self.id,self.password))
New_Member=Member('JFun',2011251)
New_Member.getId()
New_Member=Member('JFun',2011251)
이렇게 새로운 인스턴스를 만들었더니
'새로운 Member 인스턴스가 생성되었습니다.' 가 출력되는 것을 볼 수 있다.
즉, 새로운 인스턴스가 만들어 질 때 init 함수가 호출된다는 것을 알 수 있다.
클래스 상속¶
자식 클래스는 부모 클래스가 가진 함수 나 변수 를 물려받아 그대로 사용할 수 잇다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def aboutMe(self):
print ("이름 : %s, 나이: %d" % (self.name,self.age))
class Student(Person):
def school(self):
print ("goorm school")
per = Student("JFun",30)
per.aboutMe()
위의 예시를 보면 Person 클래스의 init 함수를 통해 이름과 나이를 초기값으로 받고, aboutMe라는 함수를 통해 이름과 나이를 출력하는 것을 볼 수 있다.
Student 클래스를 보면
class Student(Person):
과 같은 방법으로 Person 클래스를 상속받았다.
그렇기에 하위에 아무런 함수가 없더라도 aboutMe 함수를 호출하면 이름과 나이가 출력되는 것을 볼 수 있다.
메서드 오버라이딩¶
단순히 상속받는 것 뿐만 아니라 부모 클래스에 있는 함수를 변형하여 사용하는 것도 가능하다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def aboutMe(self):
print ("이름 : %s, 나이: %d" % (self.name,self.age))
class Student(Person):
def aboutMe(self):
print ("goorm school")
per = Person("JFun",30)
per.aboutMe()
stu = Student("JFun",40)
stu.aboutMe()
Person과 Student 모두 aboutMe라는 함수를 가지고 있지만 Person에서 aboutMe 함수를 호출했을때는 이름과 나이가, Student에서 aboutMe 함수를 호출했을때는 goorm school이 출력되는 것을 볼 수 있다.
이렇게 부모 클래스의 메서드와 같은 이름을 가진 메서드를 자식 클래스에서 새롭게 구현하는 것을 메서드 오버라이딩 이라고 한다.
'beginner > 파이썬 기초' 카테고리의 다른 글
NLTK 토큰화, 태그 (0) | 2019.05.19 |
---|---|
스택(stack)&큐(Queue)기본개념 (0) | 2019.04.09 |
장바구니 알고리즘 (0) | 2019.03.05 |
Matplotlib (0) | 2019.02.19 |
NumPy_기타 (0) | 2019.02.19 |