파이썬 문서에서 __ getitem __
의 대부분의 문서를 살펴 봤지만 여전히 그 의미를 파악할 수 없습니다.
그래서 제가 이해할 수있는 것은 __ getitem __
이 self [key]
와 같은 호출을 구현하는 데 사용된다는 것입니다. 그러나 그것의 용도는 무엇입니까?
이런 식으로 정의 된 파이썬 클래스가 있다고 가정 해 봅시다.
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __getitem__(self,key):
print ("Inside `__getitem__` method!")
return getattr(self,key)
p = Person("Subhayan",32)
print (p["age"])
예상대로 결과가 반환됩니다. 하지만 왜 처음에 __ getitem __
을 사용합니까? 또한 파이썬이 내부적으로 __ getitem __
을 호출한다고 들었습니다. 하지만 왜 그렇게합니까?
누군가 이것을 더 자세히 설명해 주시겠습니까?
해결 방법
Cong Ma는 __ getitem __
이 무엇에 사용되는지 잘 설명해 주지만 유용 할 수있는 예제를 제공하고 싶습니다.
건물을 모델링하는 클래스를 상상해보십시오. 건물의 데이터에는 각 층을 차지하는 회사에 대한 설명을 포함하여 여러 속성이 포함됩니다.
__ getitem __
을 사용하지 않으면 다음과 같은 클래스를 갖게됩니다.
class Building(object):
def __init__(self, floors):
self._floors = [None]*floors
def occupy(self, floor_number, data):
self._floors[floor_number] = data
def get_floor_data(self, floor_number):
return self._floors[floor_number]
building1 = Building(4) # Construct a building with 4 floors
building1.occupy(0, 'Reception')
building1.occupy(1, 'ABC Corp')
building1.occupy(2, 'DEF Inc')
print( building1.get_floor_data(2) )
그러나 __ getitem __
(및 그에 상응하는 __ setitem __
)을 사용하여 Building 클래스를 'nicer'로 만들 수 있습니다.
class Building(object):
def __init__(self, floors):
self._floors = [None]*floors
def __setitem__(self, floor_number, data):
self._floors[floor_number] = data
def __getitem__(self, floor_number):
return self._floors[floor_number]
building1 = Building(4) # Construct a building with 4 floors
building1[0] = 'Reception'
building1[1] = 'ABC Corp'
building1[2] = 'DEF Inc'
print( building1[2] )
이와 같이 __ setitem __
을 사용하는지 여부는 실제로 데이터를 추상화 할 계획에 따라 다릅니다.이 경우 건물을 바닥의 컨테이너로 취급하기로 결정했습니다. , 그리고 슬라이스 기능 (예 : 한 번에 여러 층의 데이터를 가져 오는 기능)까지도 필요에 따라 다릅니다.
참조 페이지 https://stackoverflow.com/questions/43627405
'파이썬' 카테고리의 다른 글
파이썬 Ubuntu16.04에 python3.6-dev를 설치할 수없는 이유 (0) | 2020.10.21 |
---|---|
파이썬 텍스트 인코딩을 결정하는 방법은 무엇입니까? (0) | 2020.10.21 |
파이썬 BeautifulSoup : 중첩 된 <ul>을 포함하는 <ul> 목록에서 모든 <li>를 어떻게 추출합니까? (0) | 2020.10.21 |
파이썬 try / catch를 사용하지 않고 int 값이 Python Enum에 있는지 어떻게 테스트합니까? (0) | 2020.10.21 |
파이썬 requirements.txt 대 setup.py (0) | 2020.10.21 |
댓글