찾다
백엔드 개발파이썬 튜토리얼Python 액세스 제한이 비공개인지 공개인지에 대한 소개(예제 포함)

이 기사는 Python 액세스 제한이 비공개인지 공개인지에 대한 소개를 제공합니다(예제 포함). 도움이 필요한 친구가 참고할 수 있기를 바랍니다.

1. 지식 포인트

모듈에서는 많은 함수와 변수를 정의할 수 있습니다. 하지만 우리가 원하는 일부 함수와 변수는 다른 사람이 사용할 수 있고 일부 함수와 변수는 모듈 내부에서만 사용되기를 바라는 경우가 있습니다. 그래서?
함수와 변수가 공개인지 비공개인지 정의하여 이 목표를 달성할 수 있습니다.
Python에서는 밑줄 "_" 접두사를 통해 이를 수행합니다.

공개: 공개. 일반 함수 및 변수 이름은 이러한 유형이며 직접 참조할 수 있습니다. 예를 들어 변수 abc, PI 등

특수 변수: 형식은 __xxx__이며 __로 시작하고 __로 끝납니다. 직접 참조할 수 있지만 특별한 용도가 있습니다. 예를 들어 __author__ 및 __name__은 특수 변수입니다. 일반적으로 직접 정의하는 변수에는 이러한 유형의 변수 이름을 사용하지 마십시오.

private: 비공개, 비공개, _xxx_ 및 __xxx와 유사한 형식(예: __num).
직접 참조하면 안 되며 외부가 아닌 내부에서만 액세스할 수 있습니다.
객체의 내부 상태는 마음대로 수정할 수 없으므로 액세스 제한 보호를 통해 코드가 더욱 강력해집니다.

2. 예시

클래스 클래스 내부에는 속성과 메서드가 있을 수 있습니다. 외부 코드는 내부의 복잡한 로직을 숨기고 인스턴스 변수 메서드를 직접 호출하여 데이터를 조작할 수 있습니다. 그러나 외부 코드는 여전히 인스턴스의 속성을 자유롭게 수정할 수 있습니다. 예:

>>>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'</module></stdin>

하지만 외부 코드가 이름과 점수를 얻으려면 어떻게 해야 할까요?
Student 클래스에 속성을 가져오는 메서드를 다음과 같이 추가합니다: get_name() 및 get_score():

class Student(object):
    ...
    def get_name(self):          
        return self.__name      
    def get_score(self):          
        return self.__score

외부 코드가 점수를 수정하면 어떻게 되나요? Student 클래스에 설정 메소드를 추가할 수 있습니다: set_score():

...
def set_score(self, score):  
    # 避免传入无效参数  
    if 0 <p> 그러면 이중 밑줄로 시작하는 전용 인스턴스 변수로서 외부에서 액세스할 수 없어야 합니까? 설마. <br>Python 인터프리터가 외부에서 __name 변수를 _Student__name으로 변경하므로 __name에 직접 액세스할 수 없습니다. 따라서 _Student__name을 통해 __name 변수에 계속 액세스할 수 있습니다. </p><pre class="brush:php;toolbar:false">>>> 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 변수와 클래스 내부의 __name 변수는 동일한 변수가 아닙니다! 내부 __name 변수는 Python 인터프리터에 의해 자동으로 _Student__name으로 변경되었으며 외부 코드는 bart에 새로운 __name 변수를 추가합니다.

그래서 Python에는 비공개 함수나 변수에 대한 액세스를 완전히 제한하는 방법이 없으므로 "직접 참조할 수 없습니다"는 것은 아닙니다. 프로그래밍 습관상 비공개 함수나 변수는 참조하면 안 됩니다. 그것들의 용도는 무엇입니까?
예:

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() 함수를 노출하지만 비공개 함수로 내부 로직을 숨깁니다. 이런 방식으로 Greeting() 함수를 호출하면 내부 비공개 함수의 세부 사항에 대해 걱정할 필요가 없습니다.
이것은 매우 유용한 코드 캡슐화 및 추상화 방법입니다. 즉, 외부에서 참조할 필요가 없는 모든 함수는 비공개로 정의하고, 외부에서 참조해야 하는 함수만 공개로 정의합니다.

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  3:
            return _private_1 (name)
        else:
            return _private_2 (name)

위 내용은 Python 액세스 제한이 비공개인지 공개인지에 대한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault思否에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음