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__())