Python에서 Getter 및 Setter 만들기

Olorunfemi Akinlua 2023년6월21일
  1. 파이썬의 게터와 세터
  2. 함수를 사용하여 Python에서 Getter 및 Setter 만들기
  3. property() 함수를 사용하여 Python에서 Getter 및 Setter 생성
  4. @property 데코레이터를 사용하여 Python에서 Getter 및 Setter 생성
Python에서 Getter 및 Setter 만들기

프로그래밍 패러다임인 OOP(Object-Oriented Programming)는 구성 가능성에서 상속에 이르기까지 많은 것을 쉽게 만들고 기능 및 프로그램 부품을 더 빠르게 구축할 수 있게 해줍니다. 이 패러다임에는 다른 기능이 있습니다. 두 가지는 게터세터입니다.

OOP의 기반이 되는 클래스에는 종종 각 인스턴스에 고유한 변수가 있으며 이러한 변수(속성이라고도 함)는 메서드를 통해 설정되거나 획득됩니다. 이러한 메서드를 gettersetters라고 합니다.

이러한 동작은 OOP를 지원하는 프로그래밍 언어에서 널리 사용되며 Python도 이를 지원합니다. 이 기사에서는 Python에서 gettersetter를 만드는 방법에 대해 설명합니다.

파이썬의 게터와 세터

Getter 및 Setter는 추상화 및 캡슐화의 목적을 무효화하여 직접 액세스하지 않고 클래스 변수 또는 속성을 설정하는 데 도움이 되는 메서드입니다. 따라서 getterssetters를 사용하여 클래스 속성을 사용할 수 있습니다.

gettersetters를 만들기 전에 다른 프로그래밍 언어와 달리 Python에는 숨겨진 필드가 없음 점 표기법을 통해 클래스 내의 변수에 직접 액세스할 수 있다는 점을 아는 것이 중요합니다.

일반 함수, property() 함수 및 @property 데코레이터를 사용하여 gettersetters를 달성할 수 있습니다.

함수를 사용하여 Python에서 Getter 및 Setter 만들기

메서드라는 일반적인 클래스 함수는 gettersetters를 만드는 데 유용하며 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()의 세 가지 메서드가 있습니다. .

인스턴스 속성에 대한 인터페이스를 제공하는 데 도움이 됩니다. 이 기능을 사용하면 모든 gettersetter 기능을 쉽게 만들 수 있습니다.

property() 함수를 사용하려면 고차 함수 property()를 만드는 함수인 4개의 인수 값을 설정해야 합니다.

getter, setterdelete 메서드는 인수(모두 선택 사항임)이며 속성 개체를 반환합니다.

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() 함수를 구현할 수 있으며 이를 통해 메서드 내에서 getset 이름을 사용할 필요가 없습니다.

@property 데코레이터를 사용하면 gettersetter 기능을 정의하는 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 Akinlua avatar Olorunfemi Akinlua avatar

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

관련 문장 - Python Property