問題
메타클래스(metaclass)는 클래스를 만드는 클래스다.
메타클래스는 type을 사용하여 동적으로 클래스를 생성하거나 type을 상속받아서 메타클래스를 구현 할 수 있다.
[ type을 사용하여 동적으로 클래스 생성 ]
# 클래스 = type("클래스명", 기반클래스튜플, 속성메서드딕셔너리) 의 형태로 생성한다.
>>> MyClass = type("MyClass", (), {})
>>> MyClass
<class '__main__.MyClass'>
>>> a = MyClass
>>> a
<__main__.MyClass object at 0x0239A330>
type은 객체의 클래스(자료형) 종류를 알아낼 때도 사용할 수 있고, 클래스를 생성할 수도 있다.
위와 같이 클래스를 만들면 이름이 MyClass인 속성도 메서드도 없는 클래스가 만들어진다.
def output(self): print("Hello")
MyClass = type("MyClass", (), {'output':output})
a = MyClass()
a.output()def output(self): print("num: ", self.num)
MyClass = type("MyClass", (), {'num':0, 'output':output})
a = MyClass()
a.output()class Parent:
def Hello(self):
print("Hello World!")
def output(self): print("num: ", self.num)
MyClass = type("MyClass", (Parent, ), {'num':0, 'output':output})
a = MyClass()
a.Hello()class MetaClass(type):
def __new__(metacls, name, bases, namespace):
namespace['num'] = 0 # 속성
namespace['output'] = lambda self: print("num: ", self.num) # 메서드
return type.__new__(metacls, name, bases, namespace)
MyClass = MetaClass('MyClass', (), {})
a = MyClass()
a.output()輸入
첫 번째 줄에 10 이하의 양의 정수 N이 입력된다.
두 번째 줄부터 N줄에 걸쳐 클래스 속성의 이름이 입력된다.
範例
3
first_variable
second_var
abcd
클래스가 동적으로 잘 생성되었는지 판별하여 채점한다.
提示
來源
klee