我有很多名为state
的相同字段的类,CharField
有选择权。所有这些类都继承自一个抽象类。我决定将选择变量放到这个抽象类中:
class UsefullAbstractClass(models.Model):
NEW = 'new'
ACTUAL = 'actual'
DELETE = 'delete'
STATE_CHOICES = (
(NEW, 'new'),
(ACTUAL, 'actual'),
(DELETE, 'delete'))
class Meta:
abstract = True
这是我的孩子班:
ChildClass(UsefullAbstractClass):
state = models.CharField(
max_length=100,
choices=STATE_CHOICES)
我得到了
姓名' STATE_CHOICES'未定义
然后我使用manage.py shell
检查此变量是否存在。所有子类实例都有这个变量
>>> c = ChildClass.objects.all()
>>> c[0].STATE_CHOICES
(('new', 'new'), ('actual', 'actual'), ('delete', 'delete'))
我该如何解决这个问题?
答案 0 :(得分:4)
ChildClass(UsefullAbstractClass):
state = models.CharField(
max_length=100,
choices=UsefullAbstractClass.STATE_CHOICES)
类定义中定义的变量是类变量;它们由所有实例共享。要创建实例变量,可以使用self.name = value在方法中设置它们。类和实例变量都可以通过符号self.name
访问。
您可以使用self.STATE_CHOICES
等ChildClass的任何方法访问它。
这就是为什么它适用于c[0].STATE_CHOICES
因此只能通过实例(self.variable_name
)访问它。如果您想在方法之外访问它,那么您应该class.variable_name
。
有关详细信息,请查看链接http://docs.python.org/reference/compound_stmts.html#class-definitions