>  기사  >  백엔드 개발  >  Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

WBOY
WBOY앞으로
2023-04-12 11:37:081374검색

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

1. 시나리오 정의

개인 속성

은 Python의 객체 지향 개발 프로세스에서 객체의 일부 속성이 객체 내부에서만 사용되기를 원하고 외부에서는 액세스하고 싶지 않음을 의미합니다.

즉, 개인 속성은 객체가 공개할 의사가 없는 속성입니다.

Private 메서드

는 Python의 객체 지향 개발 프로세스에서 객체의 일부 메서드나 기능이 객체 내부에서만 사용되기를 원하고 외부에서는 접근을 원하지 않는다는 것을 의미합니다.

즉, 비공개 메서드는 개체가 공개하고 싶지 않은 메서드나 함수입니다.

2. 구문 정의

Python에서 개인 속성과 개인 메서드를 정의하는 구문은 다음과 같습니다.

class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salary

def __secret(self):
print("%s 的工资是 %d" % (self.s_name, self.__salary))

(1) __salary는 두 개의 밑줄로 시작하는 개인 속성입니다.

(2) __secret(self)는 두 개의 밑줄로 시작하는 비공개 메서드입니다.

3. 호출 분석

(1) __init__의 객체 초기화 방법에서 두 개의 밑줄로 시작하는 __salary 속성은 비공개 속성입니다.

이제 객체 외부에서 __salary 속성을 호출하여 private 속성에 정상적으로 접근할 수 있는지 확인합니다.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

위 그림의 실행 결과에서 볼 수 있듯이 11번째 줄, 즉 객체 외부에서 객체의 개인 속성인 __salary에 액세스하면 Staff 객체 zhangsan에 no가 발생합니다. 속성 __salary.

개인 속성은 객체 외부에서 액세스할 수 없기 때문에 Staff 클래스 객체에 인스턴스 속성 __salary가 있음을 증명합니다.

self.__salary를 self.salary로 수정했습니다. __secret(self) 메서드는 self.__salary 속성을 참조하고 그에 따라 수정했습니다. 아래 그림과 같이 실행 결과를 확인하세요.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

실행 결과에서 볼 수 있듯이 이 비공개 속성의 외부 호출은 정상이며 AttributeError 오류가 표시되지 않습니다.

(2) __secret(self) 인스턴스 메소드에서 두 개의 밑줄로 시작하여 정의된 __secret(self) 메소드는 비공개 메소드입니다.

위의 테스트 과정과 동일하게 먼저 객체 외부에서 프라이빗 메소드 __secret(self)를 호출하여 프라이빗 메소드가 정상적으로 호출될 수 있는지 확인합니다.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

위 그림의 실행 결과에서 볼 수 있듯이 11번째 줄, 즉 객체 외부에서 객체의 프라이빗 메소드 __secret(self)에 액세스하면 Staff 객체 zhangsan 오류가 발생합니다. __secret 메서드가 없습니다.

개인 메서드는 개체 외부에서 액세스할 수 없기 때문에 Staff 클래스 개체에 인스턴스 메서드 __secret(self)이 있음을 증명합니다.

__secret(self) 메소드를 secret(self)로 수정했는데, 다른 코드는 변경되지 않은 상태로 아래 그림과 같이 실행 결과를 확인하세요.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

실행 결과에서 볼 수 있듯이 이 비공개 메서드의 외부 호출은 정상이며 AttributeError 오류가 표시되지 않습니다.

(3) 아래 그림에서 볼 수 있듯이 객체 내부에서 프라이빗 메서드와 프라이빗 속성을 호출할 수 있습니다.

그림에 표시된 것처럼 작업 메서드는 프라이빗 메서드 __secret(self)를 호출하고 프라이빗 메서드 __secret(self)는 프라이빗 속성 __salary를 호출합니다.

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

객체 외부에서 Staff 클래스 객체 zhangsan을 사용하여 객체의 전용 속성 및 전용 메서드에 간접적으로 액세스할 수 있는 작업 메서드를 호출합니다.

콘솔 출력을 보면 작업 메소드가 객체 내부에 정의된 프라이빗 속성과 프라이빗 메소드에 정상적으로 접근할 수 있음을 알 수 있습니다.

4. Python 의사 비공개 속성 및 비공개 메서드

Python에서는 속성과 메서드의 이름을 지정할 때 내부적으로 이름에 대해 일부 특수 처리를 수행하여 외부 세계에서 해당 이름에 액세스할 수 없도록 하기 때문에 실제로 비공개라는 느낌이 없습니다. . 속성 및 메서드.

프라이빗 속성과 프라이빗 메소드를 예로 들면 Python의 내부 처리 방법은 다음과 같습니다.

(1) 속성: __salary, 처리되는 속성 이름은 _Staff__salary(_class name__attribute name)

(2) 방법: __secret, 처리된 메서드 이름은 다음과 같습니다: _Staff__secret(_class name__method name)

Python의 전용 속성 및 전용 메서드 내부 처리를 알고 있으며 이제 이 처리된 명명 방법을 사용하여 개체 이름을 지정합니다. 외부에서 전용 속성 및 전용 메서드에 액세스하여 액세스할 수 있는지 확인합니다. 보통.

class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salary

def __secret(self):
return "%s的工资是 %d" % (self.s_name, self.__salary)
zhangsan = Staff("张三", 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())

실행 결과는 아래 사진과 같습니다

Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.

콘솔에서 예외가 발생하지 않았으며 이전 AttributeError 오류 메시지가 사라졌습니다.

이 예는 Python이 진정한 의미에서 비공개가 아니라는 것을 증명합니다. 내부 처리 방법을 알고 나면 _class name__ 속성 ​​이름(메서드 이름) 메서드를 사용하여 비공개 객체 외부에서 객체의 내부 정의에 액세스할 수 있습니다. 속성과 개인 메서드.

그러나 이 방법은 일상 작업에서는 권장되지 않습니다. 속성과 메서드가 개체 내부에 정의되면 비공개로 선언되고 호출자는 해당 규칙을 따라야 하기 때문입니다.

저는 이 작은 예를 사용하여 Python에는 실제로 프라이버시가 없다는 점을 설명하고 싶습니다.

위 내용은 Python의 개인 속성과 개인 메서드에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제