# 정적 변수 , 정적 메소드 , 접근제한 , setter / getter 메소드
class Monster():
# 게임 이름을 정적 변수로 선언
game = '리니지'
클래스 안에 정적 변수로 선언합니다.
출력을 할 때에는 game = {Monster.game} 이런 형태로 만듭니다. self를 붙이지 않습니다.
<아이폰XS 휴대폰 목록>
이름 색상 가격 메모리
아이폰XS 블랙 130만 256GB
아이폰XS 블랙 130만 256GB
아이폰XS 블랙 130만 256GB
정적 데이터와 동적 데이터를 구분하여 구현하세요
class Phone():
NAME = '아이폰XS' # 대문자 => 변경되지 않는다
def __init__(self , color , price , memory):
self.color = color
self.price = price
self.memory = memory
def __str__(self):
return f'name = {Phone.NAME} , color= {self.color} , price = {self.price} , memory = {self.memory}'
a = Phone('블랙' , 1300000 , 256)
b = Phone('블랙' , 1300000 , 256)
c = Phone('블랙' , 1300000 , 256)
print(a)
print(b)
print(c)
위의 목록을 구현하라는 문제입니다. 우선 name 한개를 정적 변수로 선언합니다.
나머지 색상과 가격 메모리는 인스턴스로 저장 합니다.
그리고 나서 위와 같이 출력하고 색상 , 가격 , 메모리 정보를 써주고 출력해주면 위와 같이 출력됩니다.
다음은 정적 메소드 입니다. 정적 메소드란 소속이 있는 함수를 말합니다.
# 일반적인 함수
def hello(name):
print(f'안녕하세요 {name}님!')
위가 바로 일반적인 함수의 형태입니다.
# 정적 메소드
class Printer():
@staticmethod
def hello(name): # self 필요 없음
print(f'안녕하세요 {name}님!')
정적 메소드의 형태는 @staticmethod를 추가하고 써주는 형태라 할 수 있습니다. self는 필요가 없습니다.
다음은 접근제한 입니다.
파이썬에서는 인스턴스 변수에 접근이 가능하기 떄문에 원치 않는 데이터가 들어올 수 있기 때문에 접근 제한을 하는 것 입니다.
접근 제한을 설정하기 위해서는 언더바(_)를 2개씩 부여하면 됩니다.
self.__name = name
self.__score = score
예시 입니다, 출력할 때에도 언더바를 붙여서 만들면 됩니다. ex) name = {self.__name}
다음은 setter / getter 메소드 입니다.
class Student():
def __init__(self , name , score):
self.__name = name
self.__score = score
def __str__(self):
return f'name = {self.__name} , score = {self.__score}'
# 점수를 변경(set)하거나 반환(get) 할 수 있도록 메소드를 설정
def set_score(self , score):
self.__score = score
def get_score(self):
return self.__score
a = Student('이오리' , 90)
b = Student('베니마루' , 95)
# a의 점수를 변경
a.set_score(200)
print(a.get_score())
위에선 점수를 변경하거나 반환 할 수 있도록 setter / getter 메소드를 사용합니다.
이때 접근 제한을 설정 해도 클래스 내부에서는 접근이 가능합니다.
설정해주고.. a의 점수를 반환하고 싶다면 a.set_score로 나타냅니다. 그러면 접근제한이 있지만 점수를 바꿀 수 있습니다.
'Python' 카테고리의 다른 글
| Python_18Day (0) | 2019.03.11 |
|---|---|
| Python_17Day (0) | 2019.03.08 |
| Python_15Day (0) | 2019.03.06 |
| Python_14Day (0) | 2019.03.05 |
| Python_13Day (0) | 2019.03.04 |