Python 특수 속성property 원리 및 사용 방법 분석

2079 단어 Pythonproperty
1 특성 속성
property는 특수한 속성입니다. 접근할 때 기능 (함수) 을 실행하고 값을 되돌려줍니다.

import math
class Circle:
  def __init__(self,radius): # radius
    self.radius=radius

  @property
  def area(self):
    return math.pi * self.radius**2 # 

  @property
  def perimeter(self):
    return 2*math.pi*self.radius # 

c=Circle(10)
print(c.radius)
print(c.area) # area, , 
print(c.perimeter) # 
'''
 :
314.1592653589793
62.83185307179586
'''
주의: 이 때의 특성arear와perimeter는 값을 부여할 수 없습니다

c.area=3 # area 
'''
 :
AttributeError: can't set attribute
'''
2 왜 프로퍼티를 써?
하나의 종류의 함수를 특성으로 정의한 후에 대상이 다시 사용할 때obj.name, 자신의name가 하나의 함수를 실행하고 계산한 것을 전혀 알아차릴 수 없습니다. 이런 특성의 사용 방식은 통일된 접근의 원칙을 따릅니다.
그 외에
ps: 대상을 위한 봉인은 세 가지 방식이 있습니다.
【public】
이런 것은 사실 포장하지 않고 대외적으로 공개된 것이다
【protected】
이런 포장 방식은 외부에 공개되지 않지만 친구(friend)나 자류(이미지에 대해'아들'이라고 하지만 왜 모두가'딸'이라고 말하지 않는지 모르겠다. 마치'parent'는 원래'부모'라는 뜻이지만 중국어는'부류'라고 부른다) 공개
【private】
이런 포장은 누구에게도 공개되지 않는다
python은 문법적으로 세 가지를 자신의class 메커니즘에 만들지 않았습니다. C++에서는 모든 데이터를 개인 데이터로 설정하고 set와 get 방법(인터페이스)을 제공하여 설정하고 얻습니다.python에서property 방법을 통해 실현할 수 있습니다

class Foo:
  def __init__(self,val):
    self.__NAME=val # 

  @property
  def name(self):
    return self.__NAME #obj.name self.__NAME( )

  @name.setter
  def name(self,value):
    if not isinstance(value,str): # 
      raise TypeError('%s must be str' %value)
    self.__NAME=value # , value self.__NAME

  @name.deleter
  def name(self):
    raise TypeError('Can not delete')

f=Foo('egon')
print(f.name)
# f.name=10 # 'TypeError: 10 must be str'
del f.name # 'TypeError: Can not delete'
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기