Python 접근 제한 private Public 에 대한 상세 한 소개
한 모듈 에서 우 리 는 많은 함수 와 변 수 를 정의 할 수 있 습 니 다.그러나 어떤 함수 와 변 수 는 우리 가 다른 사람 에 게 사용 할 수 있 기 를 바 랍 니 다.어떤 함수 와 변 수 는 모듈 내부 에서 만 사용 하고 싶 습 니 다.so?
우 리 는 이 함수,변수 가 공개 적 인지 개인 적 인지 정의 함으로써 이 목적 을 달성 할 수 있다.
Python 에 서 는 밑줄 을 통 해""입 니 다.접두사 로 이 루어 졌 습 니 다.
대상 내부 의 상 태 를 임의로 수정 할 수 없습니다.이렇게 하면 방문 제한 보 호 를 통 해 코드 가 더욱 건장 합 니 다.
2.예 를 들 어 설명 한다.
Class 클래스 내부 에서 속성 과 방법 이 있 을 수 있 습 니 다.외부 코드 는 인 스 턴 스 변 수 를 직접 호출 하 는 방법 으로 데 이 터 를 조작 하여 내부 복잡 한 논 리 를 숨 길 수 있다.그러나 외부 코드 는 인 스 턴 스 의 속성 을 자 유 롭 게 수정 할 수 있다.예 를 들 면:
>>>b.score
99
>>>b.score = 59
>>>b.score
59
내부 속성 이 외부 에 접근 하지 않도록 하려 면 속성의 이름 앞 에 밑줄''두 개 를 추가 할 수 있 습 니 다.개인 변수 로 변 경 됩 니 다.다음 과 같 습 니 다.
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
외부 에서 속성 에 접근 하려 고 시도 하 는데 오류 가 발생 할 수 있 습 니 다.개인 변수 때문에 외부 에 접근 할 수 없습니다.
>>> bart = Student('Bart Simpson', 98)
>>> bart.__name # :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
그러나 외부 코드 가 name 과 score 를 가 져 오 려 면 어떻게 합 니까?Student 클래스 에 속성 을 추가 하 는 방법:getname()과 getscore(),다음 과 같 습 니 다.
class Student(object):
...
def get_name(self):
return self.__name
def get_score(self):
return self.__score
외부 코드 가 score 를 수정 하면 어떻게 합 니까?Student 클래스 에 추가 설정 방법:setscore():
...
def set_score(self, score):
#
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')
그럼 더 블 밑줄 로 시작 하 는 개인 인 스 턴 스 변 수 는 반드시 외부 에서 접근 할 수 없 는 것 이 아 닙 니까?사실 아니 야.직접 방문 불가name 은 Python 해석 기 가 대외 적 으로name 변수 가 로 변경 되 었 습 니 다.Student__name,그래서 여전히Student__name 접근name 변수.
>>> bart = Student('Bart Simpson', 98)
>>> bart.get_name()
'Bart Simpson'
>>> bart.__name = 'New Name' # bart __name
>>> bart.__name # ! class __name !
'New Name'
>>> bart.get_name() # get_name() self.__name (_Student__name)
'Bart Simpson'
겉 으로 는 외부 코드 가 를 성공 적 으로 설정 하 였 습 니 다.name 변수,하지만 실제로 이name 변수 와 class 내부 의name 변 수 는 변수 가 아 닙 니 다!내부 의name 변 수 는 Python 해석 기 에 의 해 자동 으로 변경 되 었 습 니 다Student__name,외부 코드 가 bart 에 를 추가 하 였 습 니 다.name 변수.따라서 python 은 private 에 접근 하 는 함수 나 변 수 를 완전히 제한 할 수 있 는 방법 이 없 기 때문에'직접 인용 할 수 없습니다'가 아니 라 프로 그래 밍 습관 적 으로 private 함수 나 변 수 를 인용 해 서 는 안 됩 니 다.그럼 그들의 용 도 는?
예 를 들 면:
def _private_1 (name):
return 'hello,%s ' % name
def _private_2 (name):
return 'hi , %s ' % name
def greeting(name):
if len(name) > 3:
return _private_1 (name)
else:
return _private_2 (name)
모듈 에 greeting()함 수 를 공개 하고 내부 논 리 를 private 함수 로 숨 겼 습 니 다.이렇게 해서 greeting()함 수 를 호출 하면 내부 의 개인 함수 의 세부 사항 에 관심 을 가지 지 않 아 도 됩 니 다.이것 은 매우 유용 한 코드 패키지 와 추상 적 인 방법 이다.즉,외부 에서 인용 할 필요 가 없 는 함 수 는 모두 private 로 정의 되 고 외부 에서 인용 해 야 할 함수 만 Public 로 정의 된다.
3.전체 코드
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self, score):
#
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')
def _private_1 (name):
return 'hello,%s ' % name
def _private_2 (name):
return 'hi , %s ' % name
def greeting(name):
if len(name) > 3:
return _private_1 (name)
else:
return _private_2 (name)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.