頁面無法載入?點擊這裡可能會修復。
Placeholder

#5432
互動式

메타클래스(metaclass) - Python 1s 32MB

問題

메타클래스(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

需要登入才能撰寫程式碼。