python) 은닉구현하기(+객체와 인스턴스의 차이)

Mongle·2020년 8월 4일
0

Python

목록 보기
2/9

클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용할 수 있는 (java->private attribute)을 python에서는 어떻게 구현할까?

👉 비공개 속성을 이용하자(__속성)

class Person:
	def __init__(self, name, age, address, wallet):
    	self.name = name
        self.age = age
        self.adress = address
        self.__wallet = wallet #비공개속성

maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.__wallet -= 10000 #이런식으로 클래스 바깥에서 비공개 속성에 접근하면 에러발생

__wallet을 비공개속성으로 만들었는데 외부에서 비공개속성에 접근했기 때문에 에러가 발생한다.

그렇다면 어떻게 비공개속성에 접근할 수 있을까?

👉 java와 마찬가지로 클래스 안의 메서드를 통해서 wallet에 접근할 수 있다.(private생성자를 만들고 getter,setter를 통해서 접근하는 것과 마찬가지)


class Person:
	def __init__(self, name, age, address, wallet):
    	self.name = name
        self.age = age
        self.adress = address
        self.__wallet = wallet #비공개속성
        
    def pay(self, amount):
    	self.__wallet -= amount
        print(f"이제 {self.__wallet}원 남았네요)

maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.pay(3000)

# 출력 : 이제 7000원 남았네요

메서드도 외부의 접근을 제한한기 위해 비공개 메서드로 만들 수 있다.

class Person:
	def __greeting(self): #비공개 메서드(private)
    	print('Hello')
        
    def hello(self): #공개 메서드를 통해 비공개 메서드를 사용할 수 있다.(public)
    	self.__greeting()

  • 참고) 인스턴스와 객체의 차이

👩‍🏫 두줄요약
java에서 public, private으로 구현하는 은닉을 python에서는 공개,비공개 속성을 부여함으로써 구현할 수 있다.

profile
https://github.com/Jeongseo21

0개의 댓글