# 접근 제어
class Cls1 :
def sef_data1(self, val1, val2): # 지정하고자하는 외부의 값에 설정할 수 있다. #프로퍼티값을 입력받아 사용할 수 있다.
self.val1 = val1
self.val2 = val2
def get_data1(self):
print(self.val1) # 인스턴스에 있는 val1
print(self.val2) # 인스턴스에 있는 val2
ins1 = Cls1()
ins1.sef_data1(10, "abc") # 외부에서 self에 접근할 수는 없다. val1 과 val2만 접근해서 쓰면 된다.
ins1.get_data1() # 인스턴스에 프로퍼티값이 들어간다.
print("--------------------------------------------------------")
class Cls2 :
def set_data2(self, val1, val2):
self.val1 = val1
self.val2 = val2
# 메서드로 접근할 필요 없는 방식 ; 하지만 실무에서는 사용 못한다 ;
ins2 = Cls2()
ins2.set_data2(100, "aaaaa")
print(ins2.val1) # 필드로 접근 가능 instance.property
print(ins2.val2) # 필드로 접근 가능
ins2.val2 = "cccc"
print(ins2.val2)
# 그러면 메서드는 왜 쓰냐? ;
# 무결성, 원자성이 깨진다. ;
# 만약 외부에서 프로퍼티값을 수정할 때는 어떠한 조건을 거쳐야한다.
# 어떻게 제어할까 ? ;
# 접근 제어
class Cls1:
def set_data1(self,val1,val2,val3):
self.val1 = val1
self._val1 = val1
self.__val2 = val2
self.__val3__ = val3
def __get_print1(self):
print("이것은 비공개 메서드 입니다.")
def __get_print2__(self): # 되더라도 이렇게 메서드를 선언하면 안됨. # 내가 제어하는 건지 파이선이 제어하는 건지 구분이 안됨.
print("이것은 공용 메서드 입니다.")
# 1
ins1 = Cls1()
ins1.set_data1(10,20, 30)
print(ins1._val1) # _ 는 접근 경고가 뜬다. ;
print()
# print(ins1.__val2) # __ 는 에러가 발생 ; 강제성을 띈다 ; 프로퍼티값 비공개 속성 ; 해당 클래스 내에서만 접근이 가능하다. 외부에서의 접근을 막는다 ; 메서드로만 접근이 가능하다
print(ins1.__val3__) # __의 예외 ; 접근 가능 ; 공용으로 사용하는 레퍼런스로 인식한다.
#2
# ins1.__get_print1() # 에러 발생 ; __ 메서드 또한 비공개 가능하다. ; 비공개 메서드
ins1.__get_print2__() # 되더라도 이렇게 메서드를 선언하면 안됨.
'언어 > Python' 카테고리의 다른 글
[Python] del 예제 (0) | 2023.09.21 |
---|---|
[Python] init 예제 (0) | 2023.09.21 |
[Python] 클래스 - self (0) | 2023.09.21 |
[Python] 클래스 예제 (0) | 2023.09.21 |
[python] 사용자 정의 함수 (0) | 2023.09.20 |