2016-07-18 3 views
0

변수의 내용으로 명명 된 특정 클래스의 새 인스턴스를 만들어야합니다.Python에서 동적으로 명명 된 클래스 인스턴스를 생성하십시오.

예를 들어 "s"변수의 내용이 무엇이든 이름이 지정된 Foo 클래스의 인스턴스를 만듭니다. 이것은 내가 시도한 것입니다

class Foo: 
    pass 
s = 'bar' 
eval(s) = Foo 

위의 코드는 "함수 호출에 할당 할 수 없습니다"오류를 반환합니다.

이 경우 Foo 클래스에 'bar'라는 인스턴스를 만들 필요가 있지만 's'변수를 모든 문자열로 변경하고 여전히 작동하도록해야합니다.

다른 방법으로 클래스 인스턴스를 만든 다음 나중에 "s"변수를 사용하여 액세스 할 수도 있습니다.

미리 정의 된 사전을 만들면 많은 비슷한 질문에 답을 얻을 수 있지만 필자의 경우이 사전은 수 백 가지 길이의 손으로 작성해야하기 때문에 비실용적이며 pythonian이 아닙니다. 인스턴스를 완전히 동적으로 생성하고 액세스 할 필요가 있습니다. 이름으로도 가능하지만 또 다른 방법이 있다면 개방해야합니다.

+0

나는 당신이 함께 해결하기 위해 노력하고 있는지 물어 봐도 될까요? –

+0

글로벌 네임 스페이스 ('globals() [ 'bar'] = Foo')에 있으면'globals'에 할당 할 수 있습니다. 그러나, 당신은 일반적으로 이것을하지 않아도됩니다. 프로그래밍 할 때, 당신이 미리 일하는 이름을 아는 것이 가장 좋습니다. Ned Batchelder의이 우수 기사 (http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)를 살펴보십시오. – mgilson

+0

사전을 사용하는 것은 달성하고자하는 것에 대한 파이썬 접근법입니다. "손으로 쓴다"는게 무슨 뜻입니까? 필요한 것은'my_dict [ 's'] = Foo()' –

답변

0

이렇게해야합니다.

def make_class(name): 
    class_text = """ 
global {} # Makes the class object global. 
class {}: # You put the class here. 
    pass 
""".format(name, name) # Formats the text. There are a couple different ways to do this. 
    exec(class_text) 

예 :

>>> make_class("Foo") 
>>> make_class("Bar") 
>>> Foo() 
<__main__.Foo object at 0x7fedebcda748> 
>>> Bar() 
<__main__.Bar object at 0x7fedebcda8d0> 
+0

이 내 문제가 해결되었습니다. 고맙습니다. – XelaLord

+0

@XelaLord 문제 없습니다. – Pugduddly

관련 문제