이것은 책 머리 첫 번째 파이썬 (208 페이지 6 장)에서 발췌 한 것입니다. 난 내 자신의 버전을 쓰기에 왔을 때 나는 내가 extend
단계를 건너 뛸 수 있다고 생각초기화 목록 수퍼 클래스 - 때로는 자체 매개 변수가 필요하지만 다른 매개 변수는 필요하지 않습니까?
class AthleteList(list):
def __init__(self, a_times=[]):
list.__init__([])
self.extend(a_times)
:
class AthleteList(list):
def __init__(self, a_times=[]):
list.__init__(a_times)
를 처음에 나는 그래서 서브 클래스의 초기화의 책에서 예를 보았다 목록을 인쇄에 관해서 :
test = AthleteList([1,2,3])
print(test)
출력은 []
, 그래서 초기화에 문제가 있습니다. When searching around는, 내가 찾은 모든 경우에 나는 그것이 필요 명시 적으로 self
을 전달하여 슈퍼 클래스를 초기화 보았다 :
class AthleteList(list):
def __init__(self, a_times=[]):
list.__init__(self, a_times)
: 목록의 상위 클래스 자체가이 목록을 초기화 할 수 있도록 인수로 전달 된 객체를 필요 값. 왜 첫 번째 예제 (실제로 작동합니까?)에 self
이 필요하지 않은 것을 제외하고 는요? 비록 내가 빈리스트를 가지고 그것을 초기화한다고하더라도, 여전히 self
의리스트가 비게되도록 self
객체를 반드시 전달해야합니다. 나는 심지어는 기본적으로 그것을 할 것 같다, 먼저 빈리스트로 초기화 할 필요가 없습니다, 난 그냥 나중에 확장 할 수
class AthleteList(list):
def __init__(self, a_times=[]):
self.extend(a_times)
책에서'def __init __ (self, a_times = [])'를 보았습니까? 그렇다면 책을 바꾸는 것을 고려해야합니다. http://stackoverflow.com/documentation/python/3553/common-pitfalls/12258/mutable-default-argument#t=201612281429272429582 – DeepSpace
필자가 보았 듯이 'AthleteList'는'list' 타입이므로'[]' 부모 객체를 초기화하기 위해'self' 대신에 사용됩니다 (어떤 생성자도 인자를 필요로하지 않습니다). 그러나 내 눈에는 이것이 매우 부정합니다. 첫 번째 코드 스 니펫에서'list .__ init __ ([1, 2, 3])'를 시도하고 emtpy'a_times'를 사용하여 객체를 생성하십시오. 값은 표시되지 않습니다. – ppasler
은 ['UserList'] (https://docs.python.org/3/library/collections.html?highlight=namedtuple#collections.UserList)를 사용하면 더 쉽게 목록에서 상속받을 수 있습니다. 여기 모든 것이 expcected로 작동합니다. –