티스토리 뷰
* getter와 setter
: 객체의 내부 변수에 접근할 때, 특정 메서드를 거쳐서 접근할 수 있도록 하는 방법.
**getter, setter 예시
▼클릭!
더보기
class Person:
def __init__(self, pw):
self.hidden_pw = pw
def getter(self):
print('getter')
return self.hidden_pw
def setter(self, new_pw):
print('setter')
input_pw = input('insert password : ')
if input_pw == self.hidden_pw:
self.hidden_pw = new_pw
else:
print('wrong password!')
pw = property(getter, setter)
* mangling
- 변수에 직접적으로 접근하는 것을 막는 방법.
- 사용방법 : 변수명 앞에 __ 를 붙임.
**getter, setter 예시
▼클릭!
더보기
class Person:
def __init__(self, pw):
self.__hidden_pw = pw
def getter(self):
print('getter')
return self.__hidden_pw
def setter(self, new_pw):
print('setter')
input_pw = input('insert password : ')
if input_pw == self.__hidden_pw:
self.__hidden_pw = new_pw
else:
print('wrong password!')
pw = property(getter, setter)
person = Person('abcd')
person.__hidden_pw = 'qqqq'
person._Person__hidden_pw = 'aaaa'
person.__hiden_pw = 'qqqq' # 접근 안됨. 직접접근은 안됨.
person.pw = 'wwww' # 접근 가능. setter를 이용해서만 접근가능.
setter
insert password : aaaa
wrong password!
**다시 한 번 코드 분석하며 이해할 필요있음.
* Method(매서드)
매서드 종류 | 설명 | 파라미터 |
인스턴스 매서드 | 객체를 이용하여 매서드 호출 | self |
클래스 매서드 | 클래스를 이용하여 매서드 호출 객체로 생성된 초기 변수값을 모두 수정함. |
cls |
스태틱 매서드 | 객체를 선언하지 않고 매서드 호출 | x |
**예시 기본 식
class Account:
interest = 1.01 # 이자율 1%
def __init__(self, asset=10000):
self.asset = asset
def __show_asset(self):
print('total asset', self.asset)
def deposit(self, amount):
self.asset += amount
def withdraw(self, amount):
if self.asset >= amount:
self.asset -= amount
else:
self.__show_asset()
def add_interest(self):
self.asset = int(self.asset * self.interest)
self.__show_asset()
def change_interest(self, interest):
if interest < 1.10:
self.interest = interest
else:
print('이자율을 10% 미만으로 설정해주세요.')
@classmethod
def cls_change_interest(cls, interest):
if interest < 1.10:
cls.interest = interest
else:
print('이자율을 10% 미만으로 설정해주세요.')
@staticmethod
def interest_grade(interest):
if interest > 1.05:
print('high interest')
elif interest > 1.02:
print('middle interest')
else:
print('low interest')
**인스턴스 메서드 예시
▼클릭!
더보기
account1.change_interest(1.09)
account1.asset, account2.asset, account3.asset,\
account1.interest, account2.interest, account3.interest
(10000, 20000, 30000, 1.09, 1.01, 1.01)
**클래스 메서드 예시
▼클릭!
더보기
# 클래스 매서드 사용
# 해당 클래스로부터 만들어진 객체의 변수를 한꺼번에 변경할 때 사용
Account.cls_change_interest(1.04)
account1.asset, account2.asset, account3.asset,\
account1.interest, account2.interest, account3.interest
(10000, 20000, 30000, 1.09, 1.04, 1.04)
**스태틱 메서드 예시
▼클릭!
더보기
# 스태틱 메서드 사용
# 클래스 매서드, 스태틱 메서드의 차이 : 클래스 메서드는 클래스의 변수에 접근이 가능.
Account.interest_grade(account1.interest)
Account.interest_grade(account2.interest)
high interest
middle interest
* 클래스 설계 : is a / has a
설명 | 예시 | |
is a | 상속을 이용해서 클래스를 설계 | A is a B |
has a | 객체를 객체에 넣어서 클래스 설계 | A has a B |
**is a 예시
▼클릭!
더보기
lass Info:
def __init__(self, name, email):
self.name = name
self.email = email
# person이 info를 상속
# person이 info을 포함하고 있다.
# person은 info이다.
# = person is a info
class Person(Info):
def show(self):
print(self.name, self.email)
person = Person('peter', 'peter@naver.com')
person.show()
peter peter@naver.com
**has a 예시
▼클릭!
더보기
class Name:
def __init__(self, name):
self.name_str = name
class Email:
def __init__(self, email):
self.email_str = email
class Person:
def __init__(self, name_obj, email_obj):
self.name = name_obj
self.email = email_obj
def show(self):
print(self.name.name_str, self.email.email_str)
name_obj = Name('peter')
email_obj = Email('peter@naver.com')
person = Person(name_obj, email_obj)
person.show()
peter peter@naver.com
'TIL & WIL > Python' 카테고리의 다른 글
3주차 WIL. 키워드 정리하기 (0) | 2023.01.12 |
---|---|
Python 5일차. 모듈과 패키지, 예외처리 (0) | 2023.01.06 |
Python 4일차. 클래스(class), 상속, 데코레이터(decorator) (0) | 2023.01.05 |
Python 3일차. 함수(function) (0) | 2023.01.04 |
Python 2일차. 연산자와 조건문, 반복문 (0) | 2023.01.03 |