클래스의 기능 3가지를 알아보았다.
우선 간단한 예제를 만들어보자.
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
def full_name(self):
return self.first_name +' '+self.last_name
person = Person('Ted', 'William')
print(person.first_name) #-> 'Ted'
print(person.full_name) #-> <bound method Person.full_name of <__main__.Person object at 0x7f0329e35b90>>
property를 사용하면 클래스 내부의 함수를 특성(attribute)처럼 접근할 수 있다.
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return self.first_name +' '+self.last_name
person = Person('Ted', 'William')
print(person.first_name) #-> 'Ted'
print(person.full_name) #-> 'Ted William'
getter는 어떤 것을 가져올때 사용된다.
setter는 값을 설정해줄때 사용된다.
@property를 설정했을때 이미 어떻게 가져올지 정해졌으므로 별도로 설정할 필요는 없고 setter는 별도로 메소드를 만들어 설정해준다.
위의 예제에서
self.first_name = 'Ted'
self.last_name = 'William'
을 초기값으로 입력하고
full_name을 치면 'Ted William'이 나왔다.
그렇다면
full_name을 'Ariana Grande'로 변경해줄시
각각의 초기값이
self.first_name = 'Ariana'
self.last_name = 'Grande'
로 변경될수 있게 하려면 어떻게 해야할까?
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return self.first_name +' '+ self.last_name
@full_name.setter
def full_name(self, new_full_name):
first_name, last_name = new_full_name.split()
self.first_name = first_name
self.last_name = last_name
person = Person('Ted', 'William')
print(person.first_name) #-> 'Ted'
print(person.full_name) #-> 'Ted William'
person.full_name = 'Ariana Grande'
print(person.first_name) # 'Ariana'
print(person.last_name) # 'Grande'
print(person.full_name) # 'Ariana Grande'