프로퍼티 속성
class Test:
def __init__(self):
self.public_field =5
self._private_field = 6
self._protected_field =7
def __private_method(self):
pass
t=Test()
t
<__main__.Test at 0x103d337b8>
t.public_field
5
t._private_field
6
t._protected_field
7
class Test2:
def __init__(self):
self.color='red'
def set_color(self,clr):
self.color=clr
def get_color(self):
return self.color
t=Test2()
t
<__main__.Test2 at 0x103d743c8>
t.color
'red'
t.set_color("blue")
t.get_color()
'blue'
@property사용
class Test3:
def __int__(self):
self.__color="red"
@property
def color(self):
return self.__color
@color.setter
def color(self,clr):
self.__color= clr
t=Test3()
t.color="blue"
t.color
'blue'
class Celsius:
def __init__(self, temperature=0):
self.set_temperature(temperature)
def to_fahrenheit(self):
return (self.get_temperature() * 1.8) + 32
def get_temperature(self):
return self._temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
self._temperature = value
c=Celsius()
c._temperature
0
c.set_temperature(20)
print(c.get_temperature())
20
c.set_temperature(-300)
print(c.get_temperature())
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-7b7da100e252> in <module>()
----> 1 c.set_temperature(-300)
2 print(c.get_temperature())
<ipython-input-18-9483d32151d6> in set_temperature(self, value)
11 def set_temperature(self, value):
12 if value < -273:
---> 13 raise ValueError("Temperature below -273 is not possible")
14 self._temperature = value
15
ValueError: Temperature below -273 is not possible
c._temperature=-300
c._temperature
-300
직접 변수에 접근하면 제한이 적용되지 않음.
# 기존코드
class MovieOld:
def __init__(self, movie_name):
self.__movie_name = movie_name
def movie_name(self): # 이때 메서드 이름은 변수(속성)의 이름과 동일하게 하는 것이 좋습니다.
return self.__movie_name
def movie_name(self, new_movie_name): # 이때 메서드 이름은 변수(속성)의 이름과 동일하게 하는 것이 좋습니다.
""" 영화를 변경하는 setter 메서드"""
self.__movie_name = new_movie_name
print("============ setter를 통해 영화를 변경합니다============")
print('변경 후 영화이름 : {} '.format(self.movie_name))
movie = MovieOld('총알 탄 사나이')
movie.movie_name('j')
============ setter를 통해 영화를 변경합니다============
변경 후 영화이름 : <bound method MovieOld.movie_name of <__main__.MovieOld object at 0x103dfa470>>
class Movie:
def __init__(self, movie_name):
self.__movie_name = movie_name
@property
def movie_name(self): # 이때 메서드 이름은 변수(속성)의 이름과 동일하게 하는 것이 좋습니다.
return self.__movie_name
@movie_name.setter
def movie_name(self, new_movie_name): # 이때 메서드 이름은 변수(속성)의 이름과 동일하게 하는 것이 좋습니다.
""" 영화를 변경하는 setter 메서드"""
self.__movie_name = new_movie_name
print("============ setter를 통해 영화를 변경합니다============")
print('변경 후 영화이름 : {} '.format(self.movie_name))
#출처: http://whatisthenext.tistory.com/115 [경영학도의 좌충우돌 프로그래밍]
movie = Movie('총알 탄 사나이')
print(movie.movie_name)
총알 탄 사나이
movie.movie_name = '히든 피겨스'
============ setter를 통해 영화를 변경합니다============
변경 후 영화이름 : 히든 피겨스
Leave a Comment