我喜欢python看起来/感觉如何漂亮,我希望它可以变得更干净(可读性很棒)。
什么是清洁的方式来推翻子类时要接受一个可选的关键字参数 初始化 ,其中可选的kwarg
,必须使用 后 的super()
电话吗?
我有一个django表单,我想在其中接受一个可选的用户参数,但是如果我将其定义为参数之一user=None
,则通常的表单调用会form({})
假设位置参数引用了关键字arguments
user
。
代码胜于(我)的话:
def __init__(self, *args, **kwargs):
user = None
if 'user' in kwargs:
user = kwargs.pop('user')
super(BaseCheckoutForm, self).__init__(*args, **kwargs)
if user:
self.prefill_from_user(user)
我可以通过查看实际的Form
类以查看其查找的内容来使其最干净,但是在python中对任何子类进行子类化的最大优点之一就是收集了所有内容args
并将kwargs
其传递给子类化的任何东西。同样,这并不能容纳源代码中的任何更改。
def __init__(self, querydict=None, user=None):
super(BaseCheckoutForm, self).__init__(querydict)
if user:
self.prefill_from_user(user)
但不幸的是,我有:
def __init__(self, *args, **kwargs):
# cannot define user=None as an argument because normal usage
# of class expects a certain order of positional args
user = None
if 'user' in kwargs:
# must pop now since super()__init__ isn't expecting a user kwarg
user = kwargs.pop('user')
super(BaseCheckoutForm, self).__init__(*args, **kwargs)
if user:
self.prefill_from_user(user)
感谢您的输入!
通常,我通常只是做您在这里所做的事情。但是,您可以通过为以下代码提供默认参数来缩短/清理代码dict.pop
:
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(BaseCheckoutForm, self).__init__(*args, **kwargs)
if user is not None:
self.prefill_from_user(user)
问题内容: 最近,我做了一个Netbeans项目,并且正在使用SVN。我看到重复的类错误,并且在控制台中显示 这是PieChartExplorer.java: 我努力了: 清理并重建项目 确保我在所有构造函数中都调用了super 如何解决?下载代码。 问题答案: 前几天我看到了这些症状。 我有我一直在编辑的文件,因此决定将更改分为2个提交。我进入了包含我的文件“ x / y / Z.java”的目
本文向大家介绍Python中的super()方法使用简介,包括了Python中的super()方法使用简介的使用技巧和注意事项,需要的朋友参考一下 子类里访问父类的同名属性,而又不想直接引用父类的名字,因为说不定什么时候会去修改它,所以数据还是只保留一份的好。其实呢,还有更好的理由不去直接引用父类的名字, 这时候就该super()登场啦—— 当然 Python 2 里super() 是一定要参数的
问题内容: 在Python中,如何选择要调用的Parent方法?假设我要调用父ASDF2的方法。似乎我必须在super()中指定 ASDF1 。如果要调用ASDF3 ,则必须指定 ASDF2 吗? 在我看来是疯子。我究竟做错了什么? 问题答案: 那不是为了什么 超级基本上是按照特定顺序选择一个(或全部)父母。如果您只想调用单亲方法,请执行此操作
本文向大家介绍为什么在重写 equals方法的同时必须重写 hashcode方法,包括了为什么在重写 equals方法的同时必须重写 hashcode方法的使用技巧和注意事项,需要的朋友参考一下 我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类。 其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。O
问题内容: 创建自己的Activity子类时,我们将覆盖一些基本的Activity生命周期功能。 我们 必须 在其中哪些方法中称为超级实现, 应该 在哪里以及 只有什么好方法 ? 方法列表不是最终的,请随时添加更多功能,在哪里应该知道该怎么做。 问题答案: 必须: 应该/不应该:( 调用超类方法可能会有所帮助,除非您自己管理活动的状态或故意更改活动的行为-在这种情况下可能是有害的) 实际上,重写任
问题内容: 我有一些C#代码需要调用Python脚本数千次,每次都传递一个字符串,然后期望返回。可以使用任何版本的Python运行python脚本,因此我不能使用Iron python。建议使用IPC命名管道。我对此没有经验,并且在弄清楚如何在C#和Python之间执行此操作时遇到了麻烦。这是一个简单的过程,还是我正在寻找可观的工作量?这是解决我的问题的最好方法吗? 问题答案: 使用zeromq。
我得到以下错误: 一个月后,我正在检查我的程序,之前相同的代码没有给出错误,我想我没有改变任何可能导致这一点的东西。我试图解决这个问题;所以在第1行的错误中提到:
问题内容: 在Ruby中,您可以使用读取文件。我在Python中知道的最短和最清晰的是 还有其他方法可以使它更短(最好是一行)并且更具可读性吗? 注意:最初,我将问题表述为“在一行代码中执行此操作”。正如S.Lott所指出的,更短并不一定意味着更具可读性。因此,我改写我的问题只是为了阐明我的意思。我认为Ruby代码更好,更易读,这不一定是因为它是一行还是两行(尽管也很重要),还因为它是一个类方法,