나만 알기 쉽게 쓴 클래스 이해하기
class fishbread:
def __init__(self):
pass
클래스는 붕어빵 찍어내는 틀
붕어빵 형태를 가지는 인스턴스들이 만들어진다
인스턴스를 생성하려면 생성자를 호출해야 한다.
fish_king = fishbread() (생성자 호출을 통한 인스턴스 생성)
마치 붕어빵 틀에 기본적으로 들어가는 밀가루 반죽을 붓는 것처럼 __init__ 생성자 함수(초기화 메서드)를 불러야한다.
property
클래스 캡슐화(encapsulation)를 통해서 데이터나 메서드를 은닉시킬 수 있는데 파이썬에서는 어떻게든 접근을 할 수 있다. 그 접근을 어렵게만 만들 뿐 마음만 먹으면 맘대로 접근하여 데이터를 조작할 수 있다. 왜냐하면 네임 맹글링 기법을 사용하기 떄문이다.
프로퍼티는 해당 메서드를 읽기 전용으로 만드는 기능이다. 따라서 return으로 반환되어야 하고 속성처럼 메서드에 접근할 수 있도록 만들어준다.
@property는 getter 역할을 하고 @something.setter는 setter역할을 한다.
프로퍼티를 사용하는 목적은 간단하게
- 변수를 변경할 때 제한을 두려고
- get, set함수를 만들지 않고 더 간단하게 접근하려고
그 밖에 이유가 여러가지 있다고 한다.
참고로 홑밑줄과 곁밑줄의 차이
홑밑줄(single underscore) : 보통 내부적으로 사용하는 변수일 때 사용합니다.
곁밑줄(double underscore) : 클래스 외부에서 접근할 수 없도록 내부 변수로 만듭니다.
클래스 실습
11-1.
이름, 체중 그리고 체력을 입력받는 Human클래스 생성
routine 메소드를 통해 식사 또는 운동을 함
class Human:
def __init__(self, name, weight, strength):
self.name = name
self.weight = weight
self.strength = strength
def routine(self, action):
action.act(self)
식사와 운동 클래스
class Eat:
def act(self, human):
human.weight += 0.5
human.strength += 0.2
class Workout:
def act(self, human):
human.weight -= 0.3
human.strength += 0.7
>>> pch = Human('박찬혁', 80, 25)
>>> breakfast = Eat()
>>> crossfit = Workout()
>>> pch.routine(breakfast)
>>> print(pch.weight, pch.strength)
>>> 80.5 25.2
>>> pch.routine(crossfit)
>>> print(pch.weight, pch.strength)
>>> 80.2 25.7
11.2
class Human:
def __init__(self, name, weight, strength):
self.name = name
self.weight = weight
self.__strength = strength
def routine(self, action):
action.act(self)
@property
def strength_point(self, strength):
return self.__strength
@strength_point.setter
def strength_point(self, strength):
if strength <= 100:
self.__strength = strength
else:
print('strength는 100을 초과할 수 없습니다.')
Comments