2012-03-18 4 views
-1

파이썬 사전에서 키 값 쌍으로 저장되고 클래스 인스턴스가 작동 할 수 있습니까? 함수의 인스턴스와 클래스의 인스턴스를 사전 값으로 저장하려고했지만 작동하지 않습니다. 주위에 해결 방법이 있습니까? 아니면 사전이 클래스 및 함수의 인스턴스를 저장하기위한 것이 아닙니다. 그냥 확인을 위해 함수와 인스턴스를 파이썬에서 사전에 저장

,

# I created a dictionary 
diction = {'god': 'greed', 'hero': 'zero', 'human': 'pain'} 

# and a simple class 
class checker: 
    def __init__(self): 
     pass 

# and created a instance of that class 
obTry = checker() 

# and when I try to add this as 
diction['new':obTry] 

그것은 나에게 TypeError했다.

그냥 내가 어리석은 실수를하고있는 한 것을 깨달았다, 나는 구문에주의를 지불하지 않는

diction['new'] = obTry 

내 실수처럼 추가해야합니다.

+4

쇼 당신이 시도 무엇을 그것은 '아무튼 방법 일하지 마라. – bereal

+1

코드를 보지 않고서는 실제로 도움이되지 않습니다. –

+0

간단합니다. 검증을 위해서 사전 {... {god} : '탐욕', '영웅': 'zero', 'human': 'pain'} 사전을 만들었고 클래스 검사기로 간단한 클래스를 만들었습니다. def __init __ (self) : 해당 클래스의 인스턴스를 전달하고 생성합니다. obTry = checker() 그리고 이것을 '[new': obTry]로 추가하려고하면 'unhashabe type'으로 입력 오류가 발생합니다. 물어봐 줘서 고마워. 나는 내가 wxpython textctrl의 클래스 객체를 사전 값으로 저장할 수 있다고 생각했기 때문에이 작품이 보이기 위해 놀고 있었다. –

답변

2

두 인스턴스를 (당신은 "해쉬"수단, here을 시작하려고 이해하지 않는 경우.) 및 기능 키가 될 수 있습니다

In [151]: def foo(): pass 

In [152]: {foo:1} 
Out[152]: {<function __main__.foo>: 1} 

In [153]: {foo:1, Fake(): 2} 
Out[153]: {<__main__.Fake at 0x3e04160>: 2, <function __main__.foo>: 1} 

In [154]: Fake 
Out[154]: __main__.Fake 

In [155]: type(Fake) 
Out[155]: type 
1

사전의 은 해시 가능해야한다는 유일한 제한 사항이 있습니다.

대략 이것은 사전에 이미 입력 된 키를 수정할 수 없도록하기위한 것입니다. 왜냐하면 그들은 '길을 잃을 것'이기 때문입니다.

관련 문제