0

我有以下具有内部类和类变量的类:

class MyForm(forms.ModelForm):

    type_constant = 'type'

    class Meta:

        model = Customer
        fields = ('type')

我想将字段变量中的“类型”替换为超类中的类型常量。如何在字段变量值中使用 type_constant?

4

2 回答 2

0

一种方法是将外部类成员作为参数传递。据我所知,我没有更好的方法。间类没有关于哪个类包含它的信息。并且python没有为外部类访问提供任何特定的关键字或方法。所以最好通过参数传递来做到这一点。

__init__(self, other=None)

在课间。

于 2013-07-16T14:48:18.203 回答
0

您可以使用帧检查来解决它:

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:除非你真的需要一些魔法,否则参数传递可能是正确的方法。我发布了我的答案以表明它是可行的,但我不会认为它是好的代码,除非你有充分理由避免从外部类传递信息。

于 2013-07-16T15:12:43.187 回答