我有以下具有内部类和类变量的类:
class MyForm(forms.ModelForm):
type_constant = 'type'
class Meta:
model = Customer
fields = ('type')
我想将字段变量中的“类型”替换为超类中的类型常量。如何在字段变量值中使用 type_constant?
我有以下具有内部类和类变量的类:
class MyForm(forms.ModelForm):
type_constant = 'type'
class Meta:
model = Customer
fields = ('type')
我想将字段变量中的“类型”替换为超类中的类型常量。如何在字段变量值中使用 type_constant?
一种方法是将外部类成员作为参数传递。据我所知,我没有更好的方法。间类没有关于哪个类包含它的信息。并且python没有为外部类访问提供任何特定的关键字或方法。所以最好通过参数传递来做到这一点。
__init__(self, other=None)
在课间。
您可以使用帧检查来解决它:
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:除非你真的需要一些魔法,否则参数传递可能是正确的方法。我发布了我的答案以表明它是可行的,但我不会认为它是好的代码,除非你有充分的理由避免从外部类传递信息。