[PYTHON] 파이썬 : 빌트인리스트 타입으로부터 어떻게 상속받을 수 있습니까?
PYTHON파이썬 : 빌트인리스트 타입으로부터 어떻게 상속받을 수 있습니까?
내장 목록 유형에 몇 가지 속성을 추가하여 다음과 같이 작성했습니다.
class MyList(list):
def __new__(cls, *args, **kwargs):
obj = super(MyList, cls).__new__(cls, *args, **kwargs)
obj.append('FirstMen')
return obj
def __init__(self, *args, **kwargs):
self.name = 'Westeros'
def king(self):
print 'IronThrone'
if __name__ == '__main__':
my_list = MyList([1, 2, 3, 4])
print my_list
my_list에는 'FirstMen'요소 만 포함됩니다. 왜 내 __new__ 여기에서 작동하지 않습니다? 그리고 목록과 같은 내장형을 어떻게 상속해야합니까? 그것은 str과 같은 불변의 타입에 대해서도 같은가요?
해결법
-
==============================
1.목록 유형은 일반적으로 __init __ () 메소드 내부에서 목록의 실제 초기화를 수행합니다. 이는 변경 가능한 유형의 규칙이기 때문입니다. 변경할 수없는 유형의 하위 유형을 지정할 때 __new __ () 만 덮어 써야합니다. 목록을 하위 클래스로 만들 때 __new __ ()를 덮어 쓸 수 있지만 사용 사례에 대해서는 그렇게 할 필요가 없습니다. __init __ ()를 덮어 쓰는 것이 더 쉽습니다.
목록 유형은 일반적으로 __init __ () 메소드 내부에서 목록의 실제 초기화를 수행합니다. 이는 변경 가능한 유형의 규칙이기 때문입니다. 변경할 수없는 유형의 하위 유형을 지정할 때 __new __ () 만 덮어 써야합니다. 목록을 하위 클래스로 만들 때 __new __ ()를 덮어 쓸 수 있지만 사용 사례에 대해서는 그렇게 할 필요가 없습니다. __init __ ()를 덮어 쓰는 것이 더 쉽습니다.
class MyList(list): def __init__(self, *args): list.__init__(self, *args) self.append('FirstMen') self.name = 'Westeros'
이 경우에는 super ()를 사용하지 않는 것이 좋습니다. 여기에서 list .__ init __ ()을 호출하고 싶지 않을 것입니다.
-
==============================
2.우선, __new__을 이해하기위한 연습으로 이것을하고 있습니까? 그렇지 않다면, 당신이하려는 것을 할 수있는 좋은 방법이 거의 확실합니다. 여기서 성취하고자하는 바가 무엇인지 설명해 주시겠습니까?
우선, __new__을 이해하기위한 연습으로 이것을하고 있습니까? 그렇지 않다면, 당신이하려는 것을 할 수있는 좋은 방법이 거의 확실합니다. 여기서 성취하고자하는 바가 무엇인지 설명해 주시겠습니까?
즉, 여기에 귀하의 예에서 일어난 일이 있습니다 :
__new__에 대한 설명은 여기를 참조하십시오. http://docs.python.org/reference/datamodel.html#basic-customization
from https://stackoverflow.com/questions/9432719/python-how-can-i-inherit-from-the-built-in-list-type by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] QWidget 배경색을 설정하는 방법? (0) | 2018.11.24 |
---|---|
[PYTHON] int 객체는 반복 가능하지 않습니까? (0) | 2018.11.24 |
[PYTHON] 파이썬에서 PowerShell 스크립트 호출하기 (0) | 2018.11.24 |
[PYTHON] ElementTree 요소에서 줄 번호를 가져 오는 방법이 있나요? (0) | 2018.11.24 |
[PYTHON] 파이썬 컬렉션. 카운터 : most_common complexity (0) | 2018.11.24 |