변형 된 이름을 메타 클래스로 초기화 할 수 있습니까?파이썬에서 변경된 이름을 메타 클래스로 초기화 할 수 있습니까?
class MetaA(type):
def __new__(metaCls, name, bases, clsDict):
clsDict['_%s__counter' % name] = 0
return super(MetaA, metaCls).__new__(metaCls, name, bases, clsDict)
class A(object):
__metaclass__ = MetaA
검색된 결과가 명확하지 않습니다. 나는 종종 맹 글링 된 이름을 사용하지만, 드물게 메타 클래스를 사용하고 유효하지 않은 경우 해당 코드가 확실하지 않은 경우 '_%s__%s' % (className, attrName)
- 작동하지만 어쩌면 호환되지 않을 수 있습니다.
@Blckknght metaclass는 클래스 용 팩터 리와 비슷하므로 메타 클래스를 사용하고 코드 또는 제어 코드 미러링을 반복하지 않고 많은 클래스를 만들 수 있으므로 오류를 방지하는 데 좋은 패턴이지만 자주 필요하지는 않습니다. OOD를 사용하여 클래스별로 별도의 초기화 클래스 변수를 공유하지 못하게 할 수는 없습니다. 상속을 통해 불가능하거나 일부 공유 변수를 다시 초기화하여 공유하지 않도록 할 수 있습니다 (예 : 교착 상태 방지를위한 스레딩 잠금).). – Chameleon