Вы можете решить эту проблему с помощью проверки кадров:
import inspect
def get_enclosing(name):
# get the frame where the enclosing class in construction is evaluated
outerframe = inspect.getouterframes(inspect.currentframe())[2][0]
return outerframe.f_locals[name]
class Customer(object):
pass
class MyForm(object):
type_constant = 'type'
class Meta:
model = Customer
fields = get_enclosing('type_constant')
Тогда:
>>> MyForm.Meta.fields
'type'
Примечание 1: Я использую функцию задокументированных в inspect
модуле (см http://docs.python.org/2/library/inspect.html). Скорее всего, это будет работать только в CPython.
Примечание 2:, если вам действительно не нужна какая-либо магия, передача параметров - это, вероятно, правильный способ сделать это. Я опубликовал свой ответ, чтобы показать, что это возможно, но я не буду считать его хорошим кодом, если у вас нет причины , чтобы избежать передачи информации из внешнего класса.
Вы хотите написать '' fields = MyForm.type_constant', но без прямого обращения к MyForm? – hivert