누군가 처음 4 줄을 단어로 설명 할 수 있습니까? 나는 수업과 방법에 대해 읽었다. 그러나 여기에서는 매우 혼란스러워 보입니다.클래스, dict, self, init, args?
attrdict
클래스를 활용하는 개체의 __dict__
이 사전에 설정 한 후 사전에서 상속와의 :
누군가 처음 4 줄을 단어로 설명 할 수 있습니까? 나는 수업과 방법에 대해 읽었다. 그러나 여기에서는 매우 혼란스러워 보입니다.클래스, dict, self, init, args?
attrdict
클래스를 활용하는 개체의 __dict__
이 사전에 설정 한 후 사전에서 상속와의 :
예제에서는 위치 인수를 사용하지 않습니다. 그래서 관련 코드는 다음과 같습니다 첫 번째 줄에서
class attrdict(dict):
def __init__(self, **kwargs):
dict.__init__(self, **kwargs)
self.__dict__ = self
당신이
dict
의 서브 클래스로 클래스
attrdict
을 정의합니다. 두 번째 줄에서는 인스턴스를 자동으로 초기화하는 함수를 정의합니다. 키워드 인수 (
**kargs
)를이 함수에 전달합니다. 당신이
a
를 인스턴스화하는 경우 : 당신이 실제로 호출
a = attrdict(x=1, y=2)
attrdict.__init__(a, {'x':1, 'y':2})
DICT 인스턴스 핵심 초기화는 dict
내장 슈퍼 클래스를 초기화하여 수행됩니다. 이것은 attrdict.__init__
에 수신 된 매개 변수를 전달하는 세 번째 행에서 수행됩니다. 따라서 ,
dict.__init__(self,{'x':1, 'y':2})
는 self
(인스턴스 a
) 사전을 만드는 :
self == {'x':1, 'y':2}
좋은 점은 마지막 줄에서 발생합니다 각 인스턴스가 그 속성을 잡고 사전을 가지고 있습니다. 이것은 self.__dict__
(즉,a.__dict__
). 우리가 a.x
또는 a.y
를 작성하고 각각 값 1 또는 2를 얻을 수
a.__dict__ = {'x':1, 'y':2}
예를 들어
.
그래서,이 라인 4가하는 일입니다 : 그럼 난 a.x
및 a.y
를 호출 할 수 있습니다
a.__dict__ = a where a = {'x':1, 'y':2}
:
self.__dict__ = self
은 동일합니다.
희망이 너무 지저분하지 않습니다.
허용되는 것보다 좋습니다. – Musaffa
여기 __dict__
을 설명하는 좋은 기사입니다. 따라서 모든 속성 액세스는 상위 사전 (즉, 상속받은 dict
클래스)에 대해 발생합니다.
기사의 나머지 부분도 이해 파이썬 객체에 대한 꽤 좋은 :
는라인 별 설명에서 내 샷 :
는class attrdict(dict):
이 줄은 클래스를 선언합니다 내장 dict 클래스의 하위 클래스로 attrdict.
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
이것은 표준 __init__
방법입니다. dict.__init__(...)
에 대한 호출은 수퍼 클래스 (이 경우, dict) 생성자 (__init__
) 메소드를 사용하는 것입니다.
마지막 줄인 self.__dict__ = self
을 사용하면 __init__
메서드로 전달되는 키워드 인수 (kwargs)에 속성 (예 : 아래 코드에서 a.x, a.y)을 사용할 수 있습니다.
혼란을 해결하는 데 도움이되기를 바랍니다.
'__init__ '을 수정해야합니다. 그들 주위에 backticks를 넣으면, 그들은 내 '__init__'처럼 보일 것입니다. –
도움이 많이 있습니다. 고맙습니다! – kame
메모리를 누출하는 좋은 방법입니다. 설명과 더 나은 대안을 보려면 http://bugs.python.org/issue1469629를 참조하십시오. –