2017-01-07 4 views
1

사전에 클래스에서 만들어진 함수를 배치하려고하지만 'egg'라는 오류가 계속 발생하는 것은 정의되어 있지 않습니다.사전에있는 클래스 내의 함수

{'eggs':eggs()} 
{'eggs':spam.eggs} 
{'eggs':spam.eggs()} 

누군가가 다음 중 하나를 수행 할 수 있습니다이

class spam(object): 
    def __init__(self,my_dict={'eggs',eggs}): 
     self.my_dict=my_dict 
    def eggs(self): 
     print('eggs') 

나는 또한

class spam(object): 
    def __init__(self,my_dict): 
     self.my_dict=my_dict 
    def eggs(self): 
     print('eggs') 

my_dict={'eggs':eggs} 

가 나는 또한 함께 그 사전을 교체 시도 클래스 외부에서 사용하는 시도, 내가 지금까지 시도한 것입니다 이 사전을 작성하는 방법 또는 문자열 입력에 따라이 함수를 호출하는 다른 방법을 알려주십시오.

+1

정확히 무엇입니까? 당신은'__int__'이'__init__'가 아니라 당신이 쫓고있는 이름인지 확신합니까? 그렇다면 왜 함수를 담고있는 사전을 만들까요? 그것은 클래스가 본질적으로하는 일이며,이 정보를 담고있는'__dict__'를 가지고 있습니다. –

+0

그건 실수 였어, 나는 실제 코드에서 __init__을 사용했다. –

답변

1

해당 기능에 액세스하려면 클래스의 인스턴스을 만들어야합니다. 당신이

{'eggs': spam().eggs} 

당신은 할 수있다 같은 클래스 인스턴스없이 액세스 할 수 있도록 eggs가 아닌 정적 클래스-방법, 클래스 외부

{'eggs':spam().eggs} 
+0

그 문제에 대한 해결책이 아니었다. NameError는 해결되지 않습니다. –

+0

@NiklasR, Python 3.6에서 이것을 실행하면'NameError'가 발생하지 않습니다. – ForceBru

+0

OP가이 변수를'def __init __ (self, my_dict = eggs)'의 기본값으로 사용하려고 시도하면 여전히'NameError'를줍니다. –

1

: 당신은 클래스 외부에서이 작업을 수행 할 수 있습니다 당신이 원하는 경우에 따라서 {'eggs': spam.eggs} 같은 물건 일 것이다

@staticmethod 
def eggs(): 
    print('eggs') 

를 사용하여, 정전기에 보내고 그것을 고려.

+0

@ Jean-FrançoisFabre 감사합니다. 고정 – Uriel

+0

나는 파이썬 3.5 또는 3.6에서만 작동한다고 생각한다. 여전히'NameError : name 'spam'이 정의되지 않았습니다. –

+0

아니요, 당신 말이 맞았습니다. 3.5에 실패했습니다. 메소드 생성 순서 – Uriel

1

__init__() 안에 사전을 만듭니다. 원래의 방법이 아닌 바인딩 인스턴스 방법을 저장하려면

class spam(object): 
    def __init__(self, my_dict=None): 
    if my_dict is None: 
     my_dict = {'eggs': self.eggs} 
    self.my_dict = my_dict 

, spam.eggs 또는 type(self).eggs (모두 가진 약간 다른 의미)를 사용합니다.