내가를 통해 대부분의 문서의__getitem__에서
Python 문서도에서 유래 그래서 이것은 중복되는 질문입니다. 하지만 나는 아직도 할 수 없습의 의미를 파악니다.
그래서 내가 이해할 수 있는__getitem__
가를 구현하는 데 사용되는 통화자[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__
이 내부적으로 합니다. 하지만 왜 그것을 할 것인가?
할 수 있는 누군가를 설명해 주십시오 이에서 더 자세히?
콩 엄마가 좋은 일을 설명의 어떤__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__
)를 사용하는 건물의 클래스'좋'.
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__
처럼 이 방법에 따라 달라집할 계획을 추상적 데이터-이 경우에는 우리가 결정을 치료하는 빌딩으로의 컨테이너 바닥(그리고 당신은 또한 구현에는 반복기 위한 건물,그리고 어쩌면 능력해 슬라이스-즉 하나 이상의 바닥's 데이터에서 시간에 따라 달라집니다-무엇이 당신이 필요합니다.
을[]
구문을 얻기를 위하여 항목을 키거나 인덱스가 구문 설탕이다.
을 평가할 때는a[i]
Python 화a.__getitem__(i)
(또는형식(a).__getitem__(a,i)
,그러나 이 차이는 상속에 대 한 모형 및 중요하지 않다 여기). 는 경우에도 클래스의a
지 않을 수 있습 명시적으로 정의 이 방법,그것은 일반적으로 상속에서 조상 클래스입니다.
모든(Python2.7)특별한 메서드 이름과 그 의미는 다음과 같습니다:https://docs.python.org/2.7/reference/datamodel.html#special-method-names
마법__getitem__
기본적으로에 액세스하는 데 사용되는 목록 항목,사전 항목 배열 요소 등입니다. 그것은 매우 유용한 빠른 검색을 위해 인스턴스의 특성이 있습니다.
여기에 내가 보여주는 이 예를 들어 클래스 사람할 수 있는 인스턴스화'이름','나이','dob'(date of birth). 는__getitem__
방법을 쓰는 방법에 액세스 할 수 있는 인덱싱턴 특성과 같은 이름이나 성,하루,한 달에 또는 년의 생년월일,etc.
import copy
# Constants that can be used to index date of birth's Date-Month-Year
D = 0; M = 1; Y = -1
class Person(object):
def __init__(self, name, age, dob):
self.name = name
self.age = age
self.dob = dob
def __getitem__(self, indx):
print ("Calling __getitem__")
p = copy.copy(self)
p.name = p.name.split(" ")[indx]
p.dob = p.dob[indx] # or, p.dob = p.dob.__getitem__(indx)
return p
가나 사용자 입력은 다음과 같습니다:
p = Person(name = 'Jonab Gutu', age = 20, dob=(1, 1, 1999))
의 도움으로__getitem__
방법을 사용하는 경우 사용자에 액세스할 수 있습 색인 특성이 있습니다. 예를 들어,
print p[0].name # print first (or last) name
print p[Y].dob # print (Date or Month or ) Year of the 'date of birth'