반응형
Python 생성자 및 기본값
어떻게든, 아래의 노드 클래스에서,wordList
그리고.adjacencyList
변수는 노드의 모든 인스턴스 간에 공유됩니다.
>>> 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
변수?
저는 python 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],)
기본 인수가 해당 함수의 속성인 튜플에 저장되는 것을 볼 수 있습니다.이것은 실제로 해당 클래스와 아무런 관련이 없으며 어떤 기능에도 적용됩니다.python 2에서 속성은 다음과 같습니다.func.func_defaults
.
다른 포스터들이 지적했듯이, 당신은 아마도 사용하기를 원할 것입니다.None
각 인스턴스에 고유한 목록을 제공합니다.
class Node:
def __init__(self, wordList=None adjacencyList=None):
self.wordList = wordList or []
self.adjacencyList = adjacencyList or []
시도해 보겠습니다.
self.wordList = list(wordList)
동일한 개체를 참조하는 대신 복사본을 만들 수 있습니다.
언급URL : https://stackoverflow.com/questions/4841782/python-constructor-and-default-value
반응형
'sourcecode' 카테고리의 다른 글
오류: HTTP 오류: 400, 프로젝트 'my_project'는 Firestore 지원 프로젝트가 아닙니다. (0) | 2023.06.18 |
---|---|
루퍼의 목적과 사용 방법은 무엇입니까? (0) | 2023.06.18 |
Angular 4에서 상위 구성 요소에서 하위 구성 요소로 데이터를 전달하는 방법 (0) | 2023.06.18 |
ZSH가 RVM__rvm_cleanse_variables에 대해 불만을 제기함: 함수 정의 파일을 찾을 수 없음 (0) | 2023.06.18 |
당월을 어떻게 받을 수 있습니까? (0) | 2023.06.18 |