Предполагая, что вы знаете, что делаете, да, можно установить значения с программными c именами в теле класса, а затем получить их и ограничить эти значения только этим телом класса.
Все, что вам нужно сделать, это использовать вызов locals()
для получения словаря пространства имен и использовать этот словарь для хранения ваших значений:
class A:
locals()["key"] = "a"
print(locals()["key"] )
Это напечатает "a", и, очевидно, это значение выиграло 'не быть частью пространства имен класса B.
Если вы хотите просто хранить значения без привязки к имени, проект stackfull
предоставляет вызовы push
и pop
, которые будут вести себя так же, как вы предложили в своем примере, но если вы попробуете pop()
без предыдущего push
в той же области, вы получите ошибку из-за переполнения стека:
In [4]: !pip install stackfull
Collecting stackfull
...
Successfully installed stackfull-1.0.0
In [5]: from stackfull import push, pop
In [6]: class A:
...: push("a")
...: push("b")
...: print(pop())
...: print(pop())
...:
b
a
In [7]: class B:
...: pop()
...:
...
StackUnderflowError:
(Отказ от ответственности - я автор пакета stackfull. Мне никогда особо не требовалось ничего, кроме того, что уже есть, поэтому он давно не обновлялся - а с оператором "морж" в Python 3.8 он больше не так полезен)
Хорошо - я перечислил это, потому что он похож на код в вашем вопросе, но есть вероятность, что вам нужно что-то более распространенное, например, написание кода в методах и установка атрибутов экземпляра.