Python 使用主类';子类?中的属性;

Python 使用主类';子类?中的属性;,python,django,python-2.7,python-3.x,django-models,Python,Django,Python 2.7,Python 3.x,Django Models,样本: 如果我只使用BaseModel.CHOICES,就没有必要继承BaseModel。但是我必须继承它,因为其他列 如何让p继承CHOICES属性,而不是使用它父亲的选项?在您的示例中p不是继承的字段,因此它不能从BaseModel中“继承”任何内容P(子类)将从BaseModel继承CHOICES,但在定义字段P时,P类还不存在(它将只存在于类语句体结尾之后),因此此时无法引用P.CHOICES,由于Pclass语句的主体中没有定义名称CHOICES,因此也不能引用它。因此,基本上,您的代

样本:

如果我只使用
BaseModel.CHOICES
,就没有必要继承
BaseModel
。但是我必须继承它,因为其他列


如何让
p
继承
CHOICES
属性,而不是使用它父亲的
选项

在您的示例中
p
不是继承的字段,因此它不能从
BaseModel
中“继承”任何内容
P
(子类)将从
BaseModel
继承
CHOICES
,但在定义字段
P
时,
P
类还不存在(它将只存在于
语句体结尾之后),因此此时无法引用
P.CHOICES
,由于
P
class语句的主体中没有定义名称
CHOICES
,因此也不能引用它。因此,基本上,您的代码片段是简单明了的解决方案。

您是否尝试创建函数返回选择值并使用它。like def get_choice():返回((0,'nope'),(1,'yesp'))并使用like p=models.SmallIntegerField(默认值=1,choices=get_choice)如果你是这样问的,那么就没有像
super()
这样神奇的东西了。这似乎是正确的方法。@giaosudau我只想把所有的东西放在
BaseModel
中,让子类看起来尽可能干净,你的意思是我应该为每个子类编写一个
get_choice
方法吗?@Sinux它在一个类之外只是一个静态函数,或者只是创建一个常量。@giaosdau它不仅仅是一个
CHOICES
,然后我需要为
BaseModel
中的每个属性编写一个方法,这可能是一个很大的数字
from django.db import models


class BaseModel(models.Model):
    CHOICES = ((0, 'nope'),
               (1, 'yep'),)
    # ...


class P(BaseModel):
    p = models.SmallIntegerField(default=1, choices=BaseModel.CHOICES)