2014-12-29 2 views
0

저는 Python 프로젝트에서 작업 중이며 다음 예제와 같은 것을하고 싶지만 올바르지 않습니다. 좀 도와 줘, 제발!루프 내에서 클래스 만들기 Python

names = ['name1', 'name2'] 

for name in names: 
    class name: 
     [statements] 

고마워요!

+0

달성하려는 작업과 어떤 방식으로 이것이 "잘못된 작업"인지를 설명하십시오. –

+0

관련 : [while 루프를 통해 어떻게 파이썬에서 동적으로 변수를 만들 수 있습니까?] (http://stackoverflow.com/questions/5036700/how-can-you-dynamically-create-variables-in-python-via-a -while-loop) 및 [루프에서 다른 변수 이름을 어떻게 작성합니까? (파이썬)] (http://stackoverflow.com/questions/6181935/how-do-you-create-different-variable-names-while-in-a-loop-python) –

답변

4

class 문에는 하드 코드 된 클래스 이름이 필요합니다. 그러나 type 함수를 사용하여 이러한 동적 클래스를 만들 수 있습니다. 여기

names = ['name1', 'name2'] 
class_dict = {} 
for name in names: 
    # statements to prepare d 
    class_dict[name] = type(name, (object,), d) 

, d 당신이 당신의 클래스에서 정의하는 어떤 속성과 메소드를 포함해야 사전이다. class_dictclass 개체를 저장하는 데 사용됩니다. 전역 이름 공간에 직접 동적 이름을 삽입하는 것은 좋지 않습니다.

다음은 type 함수를 사용하여 클래스를 만드는 구체적인 예입니다.

d = {} 
d['foo'] = 5 
def initializer(self, x): 
    self.x = x + 6 
d['__init__'] = initializer 
MyClass = type('MyClass', (object,), d) 

이렇게하면 class 문과 동일한 클래스가 생성됩니다.

+0

'type()'은 ''('classobj'가 아니라)'(object,)'를'()'로 대체 할 수 있습니다. 하지만 네 * Explicit가 암시 적보다 낫습니다. :-) –

+0

아, 사실, 기본 클래스 튜플에'object'를 포함 시켰는지 여부에 관계없이'type' 인스턴스는'object'에서 상속받습니다. – chepner

관련 문제