Здесь есть две проблемы.
Во-первых, Python не делает для вас вложенную область видимости. Чтобы получить доступ к CategoryData.cat1
, вам нужно прописать его.
Во-вторых, более серьезная проблема заключается в том, что отсюда нет доступа к CategoryData
: класс еще не определен, поскольку вы находитесь в процессе его определения. Если вы сделаете это:
class Object(object):
a = 1
b = Object.a
произойдет сбой, потому что значение Object
не присваивается до конца определения класса. Вы можете думать о том, что это происходит так:
class _unnamed_class(object):
a = 1
b = Object.a
Object = _unnamed_class
Нет способа сослаться на a
от того, где назначен b
, потому что содержащему классу еще не присвоено его имя.
Чтобы назначить parent
как свойство класса, вам нужно назначить его после того, как содержащийся класс реально существует:
class CategoryData(DataSet):
class cat1:
name = 'Category 1'
class cat2:
name = 'Category 2'
CategoryData.cat2.parent = CategoryData.cat1