如何在这里访问超类属性

时间:2015-02-12 09:15:50

标签: python

我已将NEW_MESSAGE_ON_PROJECTNEW_MESSAGE_ON_PROPOSAL移至超级类BaseNotification

class CustomerNotification(BaseNotification):
    NEW_PROPOSAL = 1000
    # NEW_MESSAGE_ON_PROJECT = 1001
    # NEW_MESSAGE_ON_PROPOSAL = 1002
    CHOICES = ((NEW_PROPOSAL, "New Prpposal"),
               (NEW_MESSAGE_ON_PROJECT, "New Message on Project"),
               (NEW_MESSAGE_ON_PROPOSAL,"New Message on Proposal"))

当我设定选择权时,我得到了

NameError: name 'NEW_MESSAGE_ON_PROJECT' is not defined

我这里没有self上下文。那么解决方案是什么?

2 个答案:

答案 0 :(得分:2)

您必须明确使用基类的名称:

class CustomerNotification(BaseNotification):
    NEW_PROPOSAL = 1000
    # NEW_MESSAGE_ON_PROJECT = 1001
    # NEW_MESSAGE_ON_PROPOSAL = 1002
    CHOICES = ((NEW_PROPOSAL, "New Prpposal"),
               (BaseNotification.NEW_MESSAGE_ON_PROJECT, 
                "New Message on Project"),
               (BaseNotification.NEW_MESSAGE_ON_PROPOSAL,
                "New Message on Proposal"))

这样做的原因是,在启动类定义时,您会获得一个干净的命名空间,类似于(但肯定不相同)启动函数时获得的命名空间。

此命名空间不包含基类中的任何内容。访问基类成员是在访问已完成的类(或其对象)的成员时处理的。

答案 1 :(得分:0)

您需要直接引用BaseNotification.NEW_PROPOSAL