Python의 개인 변수

Aditya Raj 2023년6월21일
  1. 파이썬에서 개인 변수란 무엇입니까?
  2. Python에서 개인 변수를 구현하는 방법은 무엇입니까?
  3. Python에서 개인 변수에 액세스
  4. Python 개인 변수의 결론
Python의 개인 변수

개인 변수는 액세스 제어를 위해 프로그램에서 사용됩니다. Java 및 C++와 같은 프로그래밍 언어에는 개인 변수를 정의하는 키워드가 지정되어 있습니다.

Python에는 개인 변수를 정의하는 키워드가 없습니다. 이 기사에서는 개인 변수를 구현하고 클래스 이름을 사용하여 액세스하는 방법에 대해 설명합니다.

파이썬에서 개인 변수란 무엇입니까?

Python에서 개인 변수를 만들 수는 없지만 특별한 명명 규칙을 사용하여 개인 변수 구현을 시뮬레이션할 수 있습니다.

objectName.attributeName 구문을 사용하여 객체의 모든 속성에 액세스할 수 있습니다. 예를 보십시오.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.SSN = SSN


person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.SSN)

출력:

Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890

name, ageSSN 속성을 가진 Person 클래스를 만들었습니다. Person 클래스의 인스턴스 person1을 생성한 후 person1.name, person1.ageperson1 구문을 사용하여 클래스 외부의 name, ageSSN 속성에 액세스했습니다. .SSN.

SSN이 클래스 정의 외부에서 액세스되는 것을 원하지 않습니다. Python에서 개인 변수를 생성하기 위한 키워드가 없습니다. 그렇다면 개인 변수의 구현을 어떻게 시뮬레이트해야 할까요?

Python에서 개인 변수를 구현하는 방법은 무엇입니까?

파이썬에서 개인 변수를 구현하기 위해 변수 이름 앞에 이중 밑줄 (__)을 사용합니다. 이중 밑줄을 사용하여 Person 클래스의 SSN 속성을 정의해 보겠습니다.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.__SSN = SSN

Person 클래스의 인스턴스 person1을 만들고 person1.__SSN 구문을 사용하여 속성 __SSN에 액세스하면 프로그램에서 오류를 표시하고 아래 AttributeError 예외를 발생시킵니다.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.__SSN = SSN


person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.__SSN)

출력:

Name of the person is: Alex
Age of the person is: 15
/usr/lib/Python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.7) or chardet (3.0.4) doesn't match a supported version!
  warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
  File "/home/aditya1117/PycharmProjects/PythonProject/string1.py", line 11, in <module>
    print("SSN of the person is:", person1.__SSN)
AttributeError: 'Person' object has no attribute '__SSN'

__SSN을 제외한 다른 모든 속성에 액세스할 수 있습니다. 프로그램에 __SSN이라는 속성이 없다고 표시됩니다. 그렇다면 __SSN 속성의 값에 어떻게 액세스할 수 있습니까?

Python에서 개인 변수에 액세스

클래스 정의 외부에서는 private 변수에 액세스할 수 없지만 내부에서는 액세스할 수 있습니다. 따라서 클래스 내부에 개인 변수 값에 액세스하는 메서드를 만들 수 있습니다.

아래와 같이 __SSN 속성의 값을 반환하는 getSSN()이라는 메서드를 만들 수 있습니다.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.__SSN = SSN

    def getSSN(self):
        return self.__SSN


person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.getSSN())

출력:

Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890

메서드를 정의하는 대신 개인 변수에 직접 액세스할 수 있습니다. 개인 변수가 메모리에 어떻게 저장되는지 봅시다. 이중 밑줄(__)로 변수 이름을 정의할 때 Python 인터프리터는 그러한 속성이 없다고 말합니다.

변수가 어떻게 저장되는지 이해하기 위해 주어진 객체의 모든 속성을 확인할 것입니다. 객체 또는 입력 인수를 취하고 모든 객체 속성의 목록을 반환하는 dir() 함수를 사용할 것입니다. dir() 함수를 사용하여 person1 객체의 속성을 확인합시다.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.__SSN = SSN

    def getSSN(self):
        return self.__SSN


person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Attributes of the Person are:")
print(dir(person1))

출력:

Attributes of the Person are:
['_Person__SSN', '__doc__', '__init__', '__module__', 'age', 'getSSN', 'name']

nameage 속성은 있지만 __SSN 속성은 없는지 확인합니다. 그러나 _Person__SSN이라는 속성이 있습니다. 객체 person1에 대한 이 속성의 값을 인쇄해 보겠습니다.

class Person:
    def __init__(self, name, age, SSN):
        self.name = name
        self.age = age
        self.__SSN = SSN

    def getSSN(self):
        return self.__SSN


person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1._Person__SSN)

출력:

Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890

속성 _Person__SSN__SSN과 동일한 값을 갖는지 확인하십시오. 속성 __SSN은 프로그램에서 _Person__SSN으로 저장됩니다. __SSN 속성에 액세스할 때마다 프로그램에서 AttributeError 예외가 실행됩니다.

Python에서 이중 밑줄(__)을 사용하여 속성을 정의할 때 프로그램은 속성 이름 앞에 _className을 추가합니다. 이 과정을 맹글링이라고 합니다.

파이썬은 이중 밑줄을 사용하여 명명된 속성이 맹글링에서 개인 변수라고 인식합니다. 그러나 _className__attributeName 구문을 사용하여 변수에 액세스할 수 있으므로 이는 사실이 아닙니다.

Python 개인 변수의 결론

이 기사에서 우리는 Python의 개인 변수에 대해 논의했습니다. 우리는 다른 프로그래밍 언어와 달리 Python에서 개인 변수를 선언하는 특정 키워드가 없음을 확인했습니다. 그러나 이중 밑줄 문자를 사용하여 변수 이름을 지정하여 개인 변수 구현을 시뮬레이션할 수 있습니다.

또한 Python에서 개인 변수에 액세스하는 두 가지 방법에 대해 논의했습니다. 개인 변수에 액세스하는 방법을 사용하는 것이 좋습니다. 클래스 이름과 함께 접근 방식을 사용하면 변수에 직접 액세스하므로 개인 변수 구현의 본질이 파괴됩니다. 프로그램은 속성 이름 앞에 _className을 사용하여 개인 변수에 액세스하라는 경고를 표시합니다.

작가: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

관련 문장 - Python Variable