캡슐화

codakcodak·2023년 10월 11일
0

OOP python

목록 보기
9/19
post-thumbnail
post-custom-banner

public,private

  • public 은 내부,외부에서 접근이 가능하다.(클래스 외부,클래스 내부)
class Public:
    def __init__(self, name):
        self.name = name   #클래스 내부에서 name접근


public1 = Public("seoul")  
print(public1.name)   #클래스 외부에서 name접근
seoul
  • private은 내부에서만 접근이 가능하다.(클래스 내부)
class Public:
    def __init__(self, name):
        self.__name = name #클래스 내부에서 접근
		print(self.__name)

public1 = Public("seoul")
print(public1.__name)  #클래스 외부접근 불가능
seoul
Traceback (most recent call last):
  File "C:\SSAFY\python\encapsulation.py", line 55, in <module>
    print(public1.__name)
AttributeError: 'Public' object has no attribute '__name'

getter,setter

  • 은닉된 데이터에 접근하기 위한 메서드
class Public:
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name


public1 = Public("seoul")
print(public1.get_name())
public1.set_name("daejeon")
print(public1.get_name())
seoul
daejeon

property

  • getter, setter를 간단하게 구현할 수 있게하는 데코레이터함수
class Public:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, new_name):
        self.__name = new_name

public1 = Public("seoul")
print(public1.name)
public1.name = "daejeon"
print(public1.name)
seoul
daejeon

데이터은닉의 장점

  • 변수의 값을 사용해서 추가적인 후처리(문자열 붙이기 등)를 거친 후 보낼수 있다.
  • 들어오는 인자들을 검증하며 코드를 수행할 수 있다.
class Public:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self): #수의 값을 사용해서 추가적인 후처리(문자열 붙이기 등)를 거친 후 보낼수 있다.
        return "i love " + self.__name 

    @name.setter
    def name(self, new_name): #들어오는 인자들을 검증하며 코드를 수행할 수 있다.
        if len(new_name) == 0 or len(new_name) >= 10:
            raise ValueError()
        else:
            self.__name = new_name


public1 = Public("seoul")
print(public1.name)
public1.name = "daejeonaadasdasd"
print(public1.name)
i love seoul
Traceback (most recent call last):
  File "C:\SSAFY\python\encapsulation.py", line 66, in <module>
    public1.name = "daejeonaadasdasd"
  File "C:\SSAFY\python\encapsulation.py", line 59, in name
    raise ValueError()
ValueError
profile
숲을 보는 코더
post-custom-banner

0개의 댓글