Python에서 Getter 및 Setter 만들기
- 파이썬의 게터와 세터
- 함수를 사용하여 Python에서 Getter 및 Setter 만들기
-
property()
함수를 사용하여 Python에서 Getter 및 Setter 생성 -
@property
데코레이터를 사용하여 Python에서 Getter 및 Setter 생성
프로그래밍 패러다임인 OOP(Object-Oriented Programming)는 구성 가능성에서 상속에 이르기까지 많은 것을 쉽게 만들고 기능 및 프로그램 부품을 더 빠르게 구축할 수 있게 해줍니다. 이 패러다임에는 다른 기능이 있습니다. 두 가지는 게터
와 세터
입니다.
OOP의 기반이 되는 클래스에는 종종 각 인스턴스에 고유한 변수가 있으며 이러한 변수(속성이라고도 함)는 메서드를 통해 설정되거나 획득됩니다. 이러한 메서드를 getter
및 setters
라고 합니다.
이러한 동작은 OOP를 지원하는 프로그래밍 언어에서 널리 사용되며 Python도 이를 지원합니다. 이 기사에서는 Python에서 getter
및 setter
를 만드는 방법에 대해 설명합니다.
파이썬의 게터와 세터
Getter 및 Setter는 추상화 및 캡슐화의 목적을 무효화하여 직접 액세스하지 않고 클래스 변수 또는 속성을 설정하는 데 도움이 되는 메서드입니다. 따라서 getters
및 setters
를 사용하여 클래스 속성을 사용할 수 있습니다.
getter
및 setters
를 만들기 전에 다른 프로그래밍 언어와 달리 Python에는 숨겨진 필드가 없음 점 표기법을 통해 클래스 내의 변수에 직접 액세스할 수 있다는 점을 아는 것이 중요합니다.
일반 함수, property()
함수 및 @property
데코레이터를 사용하여 getter
및 setters
를 달성할 수 있습니다.
함수를 사용하여 Python에서 Getter 및 Setter 만들기
메서드라는 일반적인 클래스 함수는 getter
및 setters
를 만드는 데 유용하며 self
개념을 사용하여 쉽게 설정할 수 있습니다.
메서드는 getter
에 대한 속성을 반환하고 setters
에 대해 메서드는 인수를 속성에 바인딩합니다. 보여주기 위해 position
속성을 보유하는 Employee
, getPosition
이라는 getter
메소드 및 setPosition
이라는 setter
메소드를 사용합니다.
class Employee:
def __init__(self) -> None:
self.position = None
def getPosition(self):
return self.position
def setPosition(self, position):
self.position = position
Jacob = Employee()
Jinku = Employee()
Jacob.setPosition("Engineer II")
Jinku.setPosition("Senior Engineer")
print(Jacob.position)
print(Jinku.getPosition())
출력:
Engineer II
Senior Engineer
그러나 이 설정이나 접근 방식에는 그다지 특별한 동작이 없습니다.
property()
함수를 사용하여 Python에서 Getter 및 Setter 생성
특별한 동작을 얻기 위해 속성 객체를 생성하고 반환하는 property()
함수를 사용할 수 있습니다. 여기에는 getter()
, setter()
및 delete()의 세 가지 메서드가 있습니다.
.
인스턴스 속성에 대한 인터페이스를 제공하는 데 도움이 됩니다. 이 기능을 사용하면 모든 getter
및 setter
기능을 쉽게 만들 수 있습니다.
property()
함수를 사용하려면 고차 함수 property()
를 만드는 함수인 4개의 인수 값을 설정해야 합니다.
getter
, setter
및 delete
메서드는 인수(모두 선택 사항임)이며 속성 개체를 반환합니다.
property(fget, fset, fdel, doc)
OOP 코드에서 property()
함수를 사용해 봅시다.
class Employee:
def __init__(self):
self.position = None
def getPosition(self):
return self.position
def setPosition(self, position):
self.position = position
pos = property(getPosition, setPosition)
Jacob = Employee()
Jinku = Employee()
Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
출력:
Engineer II
Senior Engineer
property()
함수의 도입으로 개인 속성에 대한 액세스를 안전하게 유지하는 데 도움이 되는 속성 개체를 보유하는 pos
바인딩이 있습니다.
@property
데코레이터를 사용하여 Python에서 Getter 및 Setter 생성
@property
데코레이터를 사용하여 property()
함수를 구현할 수 있으며 이를 통해 메서드 내에서 get
및 set
이름을 사용할 필요가 없습니다.
@property
데코레이터를 사용하면 getter
및 setter
기능을 정의하는 position
이름을 재사용할 수 있습니다.
@property
를 사용하여 getter
를 생성하고 @position.setter
를 사용하여 setter
를 생성합니다. 코드에 print
문을 추가하고 출력 내에서 볼 수 있습니다.
class Employee:
def __init__(self):
self.position = None
@property
def position(self):
print("Get Employee Position: ")
return self._position
@position.setter
def position(self, value):
print("Set Position")
self._position = value
Jacob = Employee()
Jinku = Employee()
Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
출력:
Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer
클래스 인스턴스가 호출될 때 초기 position
속성을 설정하는 __init__
메서드로 인해 Set Position
이 네 개 있으며, 처음 두 개로 이어집니다. 다음 두 개에 대한 값을 각각의 값으로 설정하면 다시 인쇄됩니다.
getter
의 경우 속성 값을 가져올 때 Get Employee Position
문을 인쇄하고 getter
는 두 번만 호출됩니다. 따라서 두 진술.
setter
메서드를 사용할 때 OOP 코드에 유효성 검사를 추가할 수 있습니다.
class Employee:
def __init__(self):
self.position = None
@property
def position(self):
print("Get Employee Position: ")
return self._position
@position.setter
def position(self, value):
print("Set Position")
if value != None and len(value) <= 2:
raise ValueError("Position name is less than two and is deemed invalid")
self._position = value
Jacob = Employee()
Jinku = Employee()
Jacob.position = "OS"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
출력:
Set Position
Set Position
Set Position
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
Jacob.position = "OS"
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn