인자로 클래스 장식자를 썼습니다. 이 데코레이터는 클래스 필드 ID
의 값을 설정해야합니다. 나는 다음과 같은 방법으로 그 일을하고있다 :클래스 데코레이터 - 클래스 필드의 수정도 기본 클래스의 값 변경
createTest
에서
class Base:
ID = "ID_Base"
def __init__(self, n):
self.n = n
def func(self):
pass
def Test(cnt):
def createTest(className):
class _Test(className):
def __init__(self, n):
className.__init__(self, n)
def func(self):
for n in range(cnt):
className.func(self)
name = className.__name__ + "_Test"
_Test.__name__ = name
globals()[name] = _Test
_Test.ID = className.ID + '_test'
className.ID = ''
return _Test
return createTest
@Test(2)
class Derived(Base):
pass
print(Base.ID)
print(Derived.ID)
print(Derived_Test.ID)
처음 그때 그때 새로운 _Test
클래스에 대한 클래스 이름을 수정하고 현재 모듈에서 글로벌 클래스로 등록, 지정된 클래스 형에서 파생 된 클래스의 정의가 (마지막 블록에서) _Test
클래스에 ID
속성을 설정하고 클래스의 ID
을 매개 변수로 전달하고 새로운 유형을 반환합니다.
ID_Base
ID_Base_test
그러나 그것을 실행 한 후 나는 이것을보고
: :이 얻을 수있는 다음과 같은 결과를 한ID_Base
ID_Base_test
ID_Base_test
왜 Derived
클래스 대신 _Test
의 속성이 장식에서 만든 수정? 그리고 그것을 고치는 방법?
Python 2.6.6 (Linux) 및 Python 3.4.1 (Windows의 ActivePython)을 사용하여이 내용을 확인했습니다.
편집 : 나는 또한 다음과 같은 _Test
클래스의 내부 ID를 설정하려고했으나 같은 결과를 얻었다 :
def Test(cnt):
def createTest(className):
class _Test(className):
ID = className.ID + '_test'
Derived_Test는 어디에서 왔습니까? 그는 주석도 가지고 있나? –
Derived_Test 이름이 라인 특히 장식에 생성된다 '이름 = 클래스 명 .__ name__ + "_test"'설명을 '_test .__ name__ = name' '전역() [이름] = _Test' –