Класс на самом деле не существует, пока он определен. Оператор class
работает так, что тело оператора выполняется в виде блока кода в отдельном пространстве имен. В конце выполнения это пространство имен передается метаклассу (например, type
), и метакласс создает класс, используя пространство имен в качестве пространства атрибутов.
Из вашего описания, он не звучит так, чтобы Test был классом. Похоже, это должен быть модуль . some_dict
является глобальным - даже если это атрибут класса, в вашей программе есть только один такой атрибут, так что он ничуть не лучше, чем глобальный - и любые методы класса, которые есть в классе, могут быть просто функциями. *
Если вы действительно хотите, чтобы это был класс, у вас есть три варианта: установить dict после определения класса:
class Test:
some_dict = {}
Test.some_dict[Test] = True
Используйте декоратор класса (в Python 2.6 или новее):
def set_some_dict(cls):
cls.some_dict[cls] = True
@set_some_dict
class Test:
some_dict = {}
Или используйте метакласс:
class SomeDictSetterType(type):
def __init__(self, name, bases, attrs):
self.some_dict[self] = True
super(SomeDictSetterType, self).__init__(name, bases, attrs)
class Test(object):
__metaclass__ = SomeDictSetterType
some_dict = {}