试图弄清楚如何为Django管理命令编写一些mixins,它将包装而
BaseCommand.option_list不会丢失当前类或任何继承的类/ mixins的值.目标是避免BaseCommand.option_list + MyCommonOptionMixin.option_list + MyOtherCommonOptionMixin.option_list + ( local command options )在我的命令中做.
例:
class BaseCommmand(object):
option_list = (
# Default options here.
)
# Rest of BaseCommand code.
Run Code Online (Sandbox Code Playgroud)
我用一些常见的选项定义了一个mixin:
class MyCommonOptionMixin(object):
option_list = (
# Some common option/options I wish to have available in many commands
)
def __getattribute__(self, name):
values = super(MyCommonOptionMixin, self).__getattribute__(name)
if name == 'option_list':
for option in self.option_list:
if option not in values:
values += option,
return values
Run Code Online (Sandbox Code Playgroud)
也许我还有一个,只是为了涵盖我有多个的情况.mixin都覆盖了__getattribute__
class MyOtherCommonOptionMixin(object): …Run Code Online (Sandbox Code Playgroud) 我正在浏览TextSecure的来源,并好奇这个任务在第80行上做了什么.
从存储库:
public static final int REQUEST_CODE = 0x0ba7c0de; // get it?
Run Code Online (Sandbox Code Playgroud)
我确定我在某个地方之前已经看过这个,但从来没有必要使用它,并且不太明白为什么会使用它.