Programming

Python 생성자 및 기본값

procodes 2020. 8. 14. 21:19
반응형

Python 생성자 및 기본값


이 질문에 이미 답변이 있습니다.

어떻게 든 아래 Node 클래스에서

wordList

adjacencyList

변수는 Node.js의 모든 인스턴스간에 공유됩니다.

>>> class Node:
...     def __init__(self, wordList = [], adjacencyList = []):
...         self.wordList = wordList
...         self.adjacencyList = adjacencyList
... 
>>> a = Node()
>>> b = Node()
>>> a.wordList.append("hahaha")
>>> b.wordList
['hahaha']
>>> b.adjacencyList.append("hoho")
>>> a.adjacencyList
['hoho']

생성자 매개 변수에 대해 기본값 (이 경우 빈 목록)을 계속 사용할 수 있지만 둘 다 가져

a

오고

b

자체

wordList

adjacencyList

변수 를 가질 수있는 방법이 있습니까?파이썬 3.1.2를 사용하고 있습니다.


변경 가능한 기본 인수는 일반적으로 원하는 것을 수행하지 않습니다. 대신 다음을 시도하십시오.

class Node:
     def __init__(self, wordList=None, adjacencyList=None):
        if wordList is None:
            self.wordList = []
        else:
             self.wordList = wordList 
        if adjacencyList is None:
            self.adjacencyList = []
        else:
             self.adjacencyList = adjacencyList 

여기서 무슨 일이 일어나고 있는지 설명해 보겠습니다.

Python 3.1.2 (r312:79147, Sep 27 2010, 09:45:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo:
...     def __init__(self, x=[]):
...         x.append(1)
... 
>>> Foo.__init__.__defaults__
([],)
>>> f = Foo()
>>> Foo.__init__.__defaults__
([1],)
>>> f2 = Foo()
>>> Foo.__init__.__defaults__
([1, 1],)

기본 인수가 해당 함수의 속성 인 튜플에 저장되어 있음을 알 수 있습니다. 이것은 실제로 해당 클래스와 관련이 없으며 모든 기능에 적용됩니다. 파이썬 2에서 속성은

func.func_defaults

.다른 포스터가 지적했듯이, 당신은 아마도

None

센티넬 값으로 사용하고 각 인스턴스에 자체 목록을 제공 하고 싶을 것입니다 .


나는 시도 할 것이다 :

self.wordList = list(wordList)

동일한 객체를 참조하는 대신 복사본을 만들도록 강제합니다.


class Node:
    def __init__(self, wordList=None adjacencyList=None):
        self.wordList = wordList or []
        self.adjacencyList = adjacencyList or []

참고 URL :

https://stackoverflow.com/questions/4841782/python-constructor-and-default-value

반응형