Python의 비공개 메서드
이 자습서는 Python에서 비공개 메서드를 선언, 조작 및 활용하는 방법을 보여줍니다.
private
는 객체 지향 프로그래밍 언어에서 사용되는 액세스 한정자 유형에 대한 키워드입니다. 액세스 수정자는 함수 또는 변수의 가시성을 어느 정도 제한합니다. 함수 / 변수를 개인으로 선언하면이를 캡슐화하는 클래스에 대한 액세스 만 제한됩니다.
사적인 방법에 대한 실제 비교는 가정용 조명 시스템입니다. 전등 스위치와 전구는 사람이 직접 접근하고 볼 수 있기 때문에 공공 방법과 같습니다. 동시에, 보호 고무 내부의 전선은 조작하지 않으면 일반적으로 보이지 않기 때문에 사적인 방법이지만 대부분의주의를 기울이지 않고 작업을 수행합니다.
Python의 개인 액세스 수정 자
Python에서 private 메서드는 선언 된 클래스 외부 나 다른 기본 클래스에 액세스 할 수없는 메서드입니다.
Python에서 비공개 메서드를 선언하려면 메서드 이름 시작 부분에 이중 밑줄을 삽입합니다.
__init__()
메소드
Python에서 주목할만한 private 메서드는 클래스 객체의 클래스 생성자로 사용되는__init__()
메서드입니다. 이 메서드는 메서드의 인수에 따라 클래스의 개체가 인스턴스화 될 때 호출됩니다.
예를 들어, 두 개의 필드와__init__()
메소드가있는Person
클래스를 선언하십시오.
class Person:
name = ""
age = 0
def __init__(self, n, a):
self.name = n
self.age = a
이제 클래스 외부의 비공개__init__()
메소드에 액세스하려면 인스턴스화 한 후 클래스 자체의 객체에서 액세스해야합니다.
예를 들어, 같은 디렉토리의 다른 파일에서Person
클래스의 인스턴스를 만들고 클래스 이름을 사용하여 생성자를 호출합니다.
from personClass import Person
sys.path.append(".")
person = Person("John Doe", 25)
print(person.name, person.age)
출력:
John Doe 25
sys.path.append()
를 사용합니다. 이 경우 두 파일 모두 동일한 폴더에 있으므로 마침표.
충분하다. 그런 다음.py
파일 (personClass.py
)에서 클래스 (Person
)를 가져옵니다.객체를 다시 인스턴스화하기 위해Person
클래스를 변수로 인스턴스화 한 후__init__()
메소드를 명시 적으로 호출 할 수 있습니다.
예를 들면 :
person = Person("John Doe", 25)
person.__init__("Jane Doe", 29)
print(person.name, person.age)
출력:
Jane Doe 29
또한__init()__
메소드는 클래스 자체에서 호출하여 명시 적으로 호출 할 수 있습니다. 이 방법의 경우 첫 번째 매개 변수self
를 인수에 명시 적으로 넣어야합니다.
person = Person("John Doe", 25)
Person.__init__(person, "Jack Sparrow", 46) # person is the 'self' argument
print(person.name, person.age)
출력:
Jack Sparrow 46
이러한 모든 접근 방식은__init__()
메서드의 개인 속성을 유지합니다.
이제이 기본 제공 방법이 분석되었습니다. 실제로 우리 자신의 private 메서드를 클래스로 구현하고 public 메서드와의 액세스를 차별화하는 것으로 넘어가 보겠습니다.
Python에서 전용 메서드 선언
private 메서드를 선언하려면 해당 메서드 앞에 이중 밑줄__
를 붙입니다. 그렇지 않으면 기본 공용 메서드로 처리됩니다.
이전 예제에서Person
클래스를 확장하고Person
클래스의 생성자를 기반으로하는Employee
하위 클래스를 생성 해 보겠습니다.
또한 person 클래스 내에 두 개의 새 메서드 인 public 및 private 메서드를 만듭니다.
class Person:
name = ""
age = 0
def __init__(self, name, age):
self.name = name
self.age = age
def walk(self):
print("Walking")
def __call(self):
print("Taking a call")
이제Person
을 확장하는 파생 클래스 또는 하위 클래스Employee
를 만듭니다.
class Employee(Person):
occupation = "Unemployed"
salary = 0
def __init__(self, name, age, occupation, salary):
Person.__init__(self, name, age)
self.occupation = occupation
self.salary = salary
def work(self):
print("Employee is working")
self.walk()
def takeCall(self):
self.__call()
print("Employee is taking a call")
Person
클래스입니다.이 클래스에서work()
및takeCall()
메소드는 각각 상위 클래스Person
에서walk()
및__call()
클래스를 외부 적으로 호출합니다.
다른 메서드는 외부에서 공용 메서드를 호출하고 다른 메서드는 부모 클래스에서 개인 메서드를 호출합니다. 이 동작을 실행할 때 어떻게 작동하는지 봅시다.
예를 들어, 위의 클래스 선언이 주어지면 :
employee_1 = Employee("John Doe", 25, "Software Engineer", 40000)
employee_1.work()
employee_1.takeCall()
출력:
Employee is working
Walking
Traceback (most recent call last):
File "python/demo.py", line 35, in <module>
employee_1.takeCall()
File "python/demo.py", line 29, in takeCall
self.__call()
AttributeError: 'Employee' object has no attribute '_Employee__call'
work()
메소드에 대한 호출이 성공적으로 실행되어work()
및walk()
메소드의 명령문이 인쇄됩니다. 그러나takeCall()
에 대한 호출은Employee
클래스의 메소드로Person
클래스의__call()
메소드를 인식하지 않기 때문에AttributeError
를 트리거합니다. 클래스를 다른 클래스로 확장하는 것은 확장에 자체 개인 메서드를 포함하지 않습니다.
요약하면, Python의 private 메서드는 두 개의 밑줄__
를 접두사로 추가하여 선언됩니다. private 메서드를 선언하면 캡슐화 클래스에 대해 메서드를 독점적으로 예약 할 수 있습니다. private 메서드를 사용하여 다른 클래스를 확장하는 클래스는 해당 메서드를 상속하지 않으며 액세스를 시도하면 오류를 트리거합니다.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn