private, protected, publlic 멤버변수와 private, protected, publlic 멤버메소드에 대해서 자세한 설명 부탁드립니다.
안녕하세요
파이썬에서
private, protected, publlic 멤버변수와
private, protected, publlic 멤버메소드에 대해서 자세한 설명 부탁드립니다.
답변 1
1
안녕하세요 John Adams님
파이썬은 기본적으로 다른 몇몇 언어와는 다르게 접근 제어 지시자(Access Modifiers)인 private, protected, public을 명시적으로 지원하지 않습니다. 대신 파이썬은 명시적으로 접근 제어 지시자를 사용하는 것보다 이름 규칙과 관례를 따르는 방식을 제공하며, 이를 "명명 규칙" 또는 "이름 맹세(Naming Conventions)"라고 합니다.
Public 멤버 변수와 메서드:
Public 멤버 변수나 메서드는 어떤 제한도 받지 않습니다. 클래스 외부에서 직접 접근할 수 있습니다.
이름 규칙으로는 일반적으로 소문자로 시작하며, 필요한 경우 단어 사이에 언더스코어(_)를 사용합니다.
class MyClass:
def __init__(self):
self.public_variable = 10
def public_method(self):
return "This is a public method."
obj = MyClass()
print(obj.public_variable) # 10
print(obj.public_method()) # This is a public method.
Protected 멤버 변수와 메서드:
파이썬에서는 이름 앞에 언더스코어(_) 하나를 붙여서 "보호" 멤버로 표시합니다.
외부에서 직접 접근하는 것은 허용되지만, 관례적으로 접근을 제한하도록 권장됩니다.
class MyClass:
def __init__(self):
self._protected_variable = 20
def _protected_method(self):
return "This is a protected method."
obj = MyClass()
print(obj._protected_variable) # 20
print(obj._protected_method()) # This is a protected method.Private 멤버 변수와 메서드:
이름 앞에 두 개의 언더스코어(__)를 붙여서 "비공개" 멤버로 표시합니다.
외부에서 직접 접근하는 것이 막힙니다. 이름 맹세를 통해 이름이 변형되어 직접 접근이 어려워집니다.
class MyClass:
def __init__(self):
self.__private_variable = 30
def __private_method(self):
return "This is a private method."
obj = MyClass()
# 접근하면 AttributeError 발생
# print(obj.__private_variable)
# print(obj.__private_method())
# 이름 맹세를 통해 접근 가능
print(obj._MyClass__private_variable) # 30
print(obj._MyClass__private_method()) # This is a private method.
0
답변 감사합니다.
파이썬에서 Public 변수는 외부로부터 모든 접근을 허용하고 Protected 변수는 자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근 허용한다고 하나, 실제 code 를 작성해서 실행하면 Public 이나 Protected 나 차이가 없습니다. Public 이 있는대도 Protected 를 만들어놓은 이유가 있는지요? 혹시 차이가 있다면 무슨 차이가 있는지요?
1
안녕하세요 John Adams님
말씀하신 것과 같이 파이썬은 코드면에서는 Public과 Protected에 차이점은 없습니다. 그저 _로 시작하는 멤버를 직접적으로 접근하지 않는 것이 개발자들간의 암묵적인 약속입니다.
[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가
2
67
3
html 읽기 오류
1
93
2
DataFrame groupby 사용관련 질문
1
94
2
pylint shell 사용법
0
71
2
자막오류 수정가능한가요?
0
79
1
복합 조건절 관련 궁금증
0
79
2
49.행맨 프로그램 - 재시도 횟수 관련.
1
76
1
64. 파이썬 입문자가 쉽게 빠지기 쉬운 몇가지 에러(혹은 로직)에 대해 알아보기
0
103
2
Replit UI가 업데이트 되서 강의 진행이 멈췄어요
2
180
3
Replit을 사용해보려고 하는데 영상처럼 진행이 안되네요
3
422
2
실무에서의 제네레이터 함수 사용에 관한 질문입니다.
0
64
2
영상이 소리만 나오고 영상은 안보입니다.
0
87
2
pandas 오류 질문
0
125
2
상속 질문
1
132
2
total을 float으로 바꾸신 이유
0
201
2
섹션2 ["환경 vs. 설정 vs. 구성"] 강의 자막 문의
0
142
1
파이썬 data insert to table
0
222
2
파이썬 Class Method 질문
0
155
2
timeit 쓸 때는 만들었던 함수를 재사용 할 수는 없는지?
0
131
2
__repr__ 와 __str__ 차이점?
0
206
2
class method vs static method
0
274
2
Type hint 문법의 Type Checking이 강제성이 있는지?
0
164
2
클래스 접근자 강의 복습부분 0:47에 오타가 있네요
0
104
2
수업 때 쓰셨던 txt file 공유 해주시면 좋겠습니다
1
177
1





