클래스에 대한 정보를 클래스 (정적) 변수로 저장하고 싶습니다. 그러나, 나는 이러한 것들이 초기화되는 방법을 알아낼 수 없습니다. 다음은 기본적인 멍청한 예입니다 :Python 클래스 변수 초기화
함수가 호출되었으므로 (print 문이 작동 됨) 왜 클래스 변수를 변경하지 않았습니까? 클래스 정의가 완료된 후 메타 캐라스를 사용하지 않으려면 메타 클래스를 사용해야합니까?
[구체적으로는 clsMeth
을 꾸미기로 지정하고 클래스 변수를 이렇게 장식 된 모든 기능의 목록으로 지정합니다. 나는 이것을 달성하는 올바른 방법이 아닌 것 같아서 계속 전진했지만 여전히 궁금하다.]
편집 : 많은 사람들이 지적했듯이 위의 코드는 ' 실행. A.clsMeth()
에 대한 호출이 A
의 이전 버전을 참조하고 실행하는 IPython 세션에서 실행했습니다. 그러한 것은 해석 된 언어를 사용할 때의 위험입니다. 나는 이런 식으로 뭔가에가는 결국 :
outsideDict = {}
def outsideDec(func):
outsideDict[func.__name__] = func
class A(object):
@outsideDec
def someMethod(self):
print 'ID %s' % id(self)
def otherMethod(self):
print 'other'
print outsideDict
one, two = A(), A()
outsideDict['someMethod'](one)
outsideDict['someMethod'](two)
는 아마도 이것은 또 다른 질문을해야하지만, outsideDec
실행됩니다 때, 그것은 인수의 구성원 무엇 클래스 말할 수있는 방법은 무엇입니까? 아니면 파이썬에서 이와 같은 인트로 스펙 션을하는 더 좋은 방법이 있을까요? 나는 여기서 나가서 대답을 받아들이고 더 많은 연구를 할 것입니다. 모두에게 감사드립니다!
'A'가 정의되지 않았기 때문에'A.clsMeth'를 호출 할 때 오류가 있습니다. 어쩌면 당신은 통역사를 사용하고 있으며 오래된 'A' 정의가 있습니까? – jcollado
이 샘플을 어떻게 실행합니까? 구문이 올바르지 않으므로이 작업을 수행 할 수 없습니다. 'A.clsMth()'는 클래스 정의 안에 이와 같이 배치 할 수 없습니다. – gecco
@gecco : 가능합니다. 구문은 괜찮습니다. A.clsMeth()가 호출되었을 때'A'에 대한 할당이 이루어지지 않았기 때문에, jcollado가 언급했듯이, 런타임 오류로 실패 할 것입니다.하지만 그것을 할 수 있습니다. –