티스토리 뷰

 

 

* 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

 

 

 


 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함