Backend/Python

Python 파이썬 데코레이션 : 어노테이션

쏠솔랄라 2023. 7. 4. 08:25

 

 

데코레이터 == 어노테이션

 

: 바로 아래에 있는 영역에 강제적인 의미를 부여하는 키워드
@뒤에 알맞은 키워드를 함께 적고 밑에 코드를 구현

 


setter 

: 멤버변수의 값을 셋팅하는 메소드


1.메소드를 통한 접근

 def set_멤버변수명(매개변수):
              코드 정의 

 

2.데코레이터를 사용하는 방식

  @멤버변수명.setter
  def 멤버변수명(self,매개변수):
      코드 정의

 


getter

: 멤버변수의 값을 반환 하는 메소드
1.메소드를 통한 접근

def get_멤버변수명():
         return 멤버변수


2.데코레이터를 사용하는 방식

@property
def 멤버변수명(self):
    return self.멤버변수명

 


property

: 클래스의 멤버변수

 

 

class Info:

    def __init__(self,name = None,age = 0) -> None:
        print("생성자 호출")
        self.name = name
        #self.__name = name 
        self.set_age(age)
        #self.__age = age

    #setter
    def set_age(self,age):
        if age < 1:
            print("나이를 잘못입력하셨습니다.")
            self.__age = 1
            return
        self.__age = age
 
    #getter
    def get_age(self):
        return self.__age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name:str):
        if name.__len__() < 2:
            print("이름은 두글자 이상입니다.")
            return
        self.__name = name

    def setData(self,name,age):
        self.__name = name
        self.set_age(age)
        # if age < 1:
        #     print("나이를 잘못입력하셨습니다.")
        #     self.__age = 1
        #     return
        # self.__age = age

    def disp(self) -> None:
        print("이름 : {}".format(self.__name))
        print("나이 : {}".format(self.__age))


a = Info("김모씨",-20)

#print(a.name)
#print(a.__age)

#a.set_age(-30)
#print(a.get_age())

#a.name = "ㅇㅇ"

a.name = "이ㅁㄴㅇㄹ"

print(a.name)

#a.setData("이름없음",-50)

a.disp()

 

 

출력화면

 

 

ex1.

class Info:

    def __init__(self,name = None,age = 0) -> None:
        print("생성자 호출")
        self.__name = name 
        self.set_age(age)
        #self.__age = age

    #setter
    def set_age(self,age):
        if age < 1:
            print("나이를 잘못입력하셨습니다.")
            self.__age = 1
            return
        self.__age = age
 
    #getter
    def get_age(self):
        return self.__age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name:str):
        if name.__len__() < 2:
            print("이름은 두글자 이상입니다.")
            return
        self.__name = name

    def setData(self,name,age):
        self.__name = name
        self.set_age(age)

    def disp(self) -> None:
        print("이름 : {}".format(self.__name))
        print("나이 : {}".format(self.__age))

    #클래스 메소드
    # @classmethod를 붙여서 선언한 멤버 메소드
    # self 대신에 cls
    # 클래스 내부를 접근하려 할때 사용한다 ; 클래스 멤버 변수나 멤버 메소드를 접근해야 할 때 사용한다
    
    @classmethod
    def create(cls):
        return Info()


i = Info.create()
print(i)

# a = Info("김모씨",-20)
# a.disp()

 

 

ex2.

class Info:

    count = 0

    def __init__(self,name = None,age = 0) -> None:
        print("생성자 호출")
        Info.count+=1
        self.__name = name 
        self.set_age(age)
        #self.__age = age

    #setter
    def set_age(self,age):
        if age < 1:
            print("나이를 잘못입력하셨습니다.")
            self.__age = 1
            return
        self.__age = age
 
    #getter
    def get_age(self):
        return self.__age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name:str):
        if name.__len__() < 2:
            print("이름은 두글자 이상입니다.")
            return
        self.__name = name

    def setData(self,name,age):
        self.__name = name
        self.set_age(age)

    def disp(self) -> None:
        print(Info.count)
        print("이름 : {}".format(self.__name))
        print("나이 : {}".format(self.__age))
    
    @classmethod
    def create(cls):
        return Info()

    # 객체의 정보를 출력해주는 메소드
    # 기본적으로 객체를 출력할때 print함수 내부에서는 __str__ 호출하고 있다...
    def __str__(self) -> str:
        return "이름 : {}".format(self.__name) + "\n나이 : {}".format(self.__age)

    # 소멸자 - __del__
    # - 객체 소멸시 자동으로 호출되는 메소드
    # - 객체 정리.....

    def __del__(self):
        print("소멸자 호출")
        Info.count-=1

i = Info.create()
print(i)

a = Info("김모씨",-20)
a.disp()

a = Info("김땡땡",-20)
a.disp()
print([a])

# ls = [1,2,3,4,5]

# print(ls)
# print(ls.__str__())