xylist
xy_list : 어떻게 기본 list에서 새로운 자료형을 만드나- 006
아예 새로운 자료형을 만든다고 생각하면, 아래에 언급하는 대부분의 던더메소드들을 새롭게 정의해야 하는데, 만드는건 어떻게든 만든다 하더라도, 만들고 나서 새로운 자료형인데, 이것을
한두번 테스트하는거야 가능하겟지만, 기본적인 자료형처럼 사용하는 것은 생ㄱ가보다 쉬운일이 아닙니다
- 다른 사람들은 이게 문제가 없을지 어떻게 믿고 사용하냐는 것이며
- 풍부한 관련 기능이 없을수 있다는 것이며
- 지속적인 관리가 되는지 의구심을 가질수 있습니다
당연히 제가 만드는 xy_list도 다른 분들은 쉽게 사용하기를 꺼려하실것입니다. 그렇지만
이것을 만든 이유중의 하나는
- 어떤 다른 새로운 자료형을 만든다고 한다면, 도움이 될것이며
- 우리가 사용하는 것은 거의대부분 0에서 시작이 되는데, 엑셀과같이 1부터시작하는 코드를 사용하는 프로그램은 가끔 0과1 사이에서 왔다갔다 하고는 합니다
그래서 저는 이두가지가 모드 하나에 들어가는 형태와, 조금 불편하기도 하지만, “~”을 이용하는것처럼 그냥 적용해 본것입니다. 저의 경우도 list의 형태인데, 0이 아닌 1부터 시작하는 것으로 만드는 기능을 넣고싶고 싶었습니다.
이제 기존자료형 + 추가기능을 만드는 방법에 대해서 설명을 드리는데, 자세한 내용은
xy_list모듈의 소스를 참고하시기를 바랍니다
새로운 자료형을 만드는 것을 참고려면, xy_list모듈의 소스코드를 참고하시면 되는데, 가장 먼저 알아야
할 부분이 바로 던더메소드의 역할들에 대해서 이해를 하는 것이 필요합니다. 아래의 것은 리스트에서 사용되는 중요 던더메소드에 대한 설명입니다
함수 |
사용법 |
간단한설명 |
__len__ |
len(x) |
객체의 길이를 반환 |
__add__ |
x+y ==> x.__add__(y) |
operator.add(x, y)는 x+y |
__iadd__ |
x+= y ==> x__iadd__(y) |
|
__delattr__ |
|
클래스에서 속성을 삭제하려고 할 때 호출 |
__delitem__ |
del self[key] |
항목을 삭제할 때 실행 |
__eq__ |
x == y ==> x.__eq__(y) |
등괄호 |
__ge__ |
x >= y ==> x.__ge__(y) |
>=사용시 |
__getattribute__ |
|
|
__getitem__ |
self[key] |
키에 대한 항목을 가져 오려고 할 때 실행 |
__gt__ |
x > y ==> x.__gt__(y) |
>사용시 |
__imul__ |
x *= y ==> x.__imul__(y) |
*=사용시 |
__init__ |
|
인스턴스가 __new__로 생성된 후, 호출되는 |
__le__ |
x <= y ==> x.__le__(y) |
<= |
__lt__ |
x < y ==> x.__lt__(y) |
< |
__mul__ |
x * y ==> x.__mul__(y) |
* |
__ne__ |
x != y ==> x.__ne__(y) |
!= |
__new__ |
|
새로운 인스턴스를 만들 때 제일 처음으로 실행되는 메소드 |
__setattr__ |
|
|
__setitem__ |
self[key] = value |
dictionary[key] = item |
__sizeof__ |
|
sys.getsizeof ()를 실행할 때 호출 |
__str__ |
|
개체를 인쇄 가능한 형식으로 인쇄하려고 할 때 실행 |
위의 중요한 던더메소드중에서 , 1부터 시작되는 리스트는 어떤 형태의 값에 대해서 순서를 뜻하는 값이 사용될 때 이것을 바꾸면 되는 것입니다. 즉, 리스트의 기본자료형은 0이므로, 입력은 1로 하면, 내부적으로 0으로 바꾸면 되는 것입니다
위의 던더메소드에서 숫자가 들어가는 메소드를 보면, 아래와같습니다
함수 |
사용법 |
간단한설명 |
__len__ |
len(x) |
객체의 길이를 반환 |
__delitem__ |
del self[key] |
항목을 삭제할 때 실행 |
__getitem__ |
self[key] |
키에 대한 항목을 가져 오려고 할 때 실행 |
__setitem__ |
self[key] = value |
dictionary[key] = item |
__str__ |
|
개체를 인쇄 가능한 형식으로 인쇄하려고 할 때 실행 |
예를들어 aaa = [1,2,3,4,5]라고 한다면, aaa[2]를 하면 3이나와야하고, aaa[“2”]를하면 2가 나와야 하는것입니다
그러면, 위의 던더메소드 중에서 __getitem__이 바로 이럴 때 사용되는 메소드입니다. 이메소드는 아래와 같은 형태로 사용이 되는 것입니다
def __getitem__(self, key=""):
위와같이 조건으로 비교를 해서 기존의 것도 사용하고, 추가된 부분에서 원하는 코드를 작성하면 되는 것입니다