728x90


1. 프로퍼티(property)

* 게터와 세터를 사용해 변수에 접근하려면 '객체명.게터' (ex) p1.get_age() ) 의 형식으로 접근해야하는데, 코드가 복잡해 보인다. 이런 상황에서 @property 나 property(게터, 세터) 를 사용하면 더 깔끔한 코드를 만들 수 있다.
 

# 게터와 세터 메소드를 이용한 예시

class Person:
    def __init__(self, n, a):
        self.set_name(n)
        self.set_age(a)

    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

    def set_name(self, n):
        self.__name = n

    def set_age(self, a):
        if a <= 0:
            pass
        else:
            self.__age = a


def main():
    p1 = Person('June', 22)
    print(p1.__dict__)  # {'_Person__name': 'June', '_Person__age': 22}
    p1.set_age(32)  # 클래스 변수 age 에 직접 접근하지 않고 메소드를 이용해 간접접근
    print(p1.__dict__)  # {'_Person__name': 'June', '_Person__age': 32}
    print(p1.get_age())  # 32 // 게터를 이용해 클래스 변수 age 를 출력


main()

 

# property() 를 사용한 예시

class Person:
    def __init__(self, n, a):
        self.set_name(n)
        self.set_age(a)

    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

    def set_name(self, n):
        self.__name = n

    def set_age(self, a):
        if a <= 0:
            pass
        else:
            self.__age = a

    name = property(get_name, set_name)
    age = property(get_age, set_age)


def main():
    p1 = Person('June', 22)
    print(p1.__dict__)  # {'_Person__name': 'June', '_Person__age': 22}
    p1.name = "set_june"  # 프로퍼티 객체인 name 을 세터처럼 사용
    print(p1.__dict__)  # {'_Person__name': 'set_june', '_Person__age': 22}
    print(p1.name)  # set_june // 프로퍼티 객체인 name 을 게터처럼 사용


main()

 

# @property 를 사용한 예시

class Person:
    def __init__(self, n, a):
        self.__name = n
        self.__age = a

    @property  # name 프로퍼티 객체를 생성하고, 이름에 해당하는 메소드를 게터로 지정
    def name(self):
        return self.__name

    @property  # age 프로퍼티 객체를 생성하고, 이름에 해당하는 메소드를 게터로 지정
    def age(self):
        return self.__age

    @name.setter  # 이어 등장하는 메소드를 name 프로퍼티 객체의 세터로 등록
    def name(self, n):
        self.__name = n

    @age.setter  # 이어 등장하는 메소드를 age 프로퍼티 객체의 세터로 등록
    def age(self, a):
        if a <= 0:
            pass
        else:
            self.__age = a


def main():
    p1 = Person('June', 22)
    print(p1.__dict__)  # {'_Person__name': 'June', '_Person__age': 22}
    p1.name = "set_june"  # 프로퍼티 객체인 name 을 세터처럼 사용
    print(p1.__dict__)  # {'_Person__name': 'set_june', '_Person__age': 22}
    print(p1.name)  # set_june // 프로퍼티 객체인 name 을 게터처럼 사용


main()

 

728x90

+ Recent posts