假设我有一个带有构造函数(或其他函数)的类,它接受可变数量的参数,然后有条件地将它们设置为类属性.
我可以手动设置它们,但似乎变量参数在python中很常见,应该有一个共同的习惯用法.但我不确定如何动态地这样做.
我有一个使用eval的例子,但这几乎不安全.我想知道这样做的正确方法 - 也许是lambda?
class Foo:
def setAllManually(self, a=None, b=None, c=None):
if a!=None:
self.a = a
if b!=None:
self.b = b
if c!=None:
self.c = c
def setAllWithEval(self, **kwargs):
for key in **kwargs:
if kwargs[param] != None
eval("self." + key + "=" + kwargs[param])
Run Code Online (Sandbox Code Playgroud) 而不是每次我定义一个类时都编写这样的代码:
class Foo(object):
def __init__(self, a, b, c, d, e, f, g):
self.a = a
self.b = b
self.c = c
self.d = d
self.e = e
self.f = f
self.g = g
Run Code Online (Sandbox Code Playgroud)
我可以使用此配方进行自动属性分配.
class Foo(object):
@autoassign
def __init__(self, a, b, c, d, e, f, g):
pass
Run Code Online (Sandbox Code Playgroud)
两个问题:
我用构造函数定义了一个类:
class Example:
def __init__(self, a, b, c):
...
Run Code Online (Sandbox Code Playgroud)
现在我想为每个构造函数参数声明一个字段,如下所示:
class Example:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
Run Code Online (Sandbox Code Playgroud)
我想自动执行此操作。PyCharm 的检查允许我为参数生成字段,但一次只能生成一个(作为 的修复Parameter x is not used),这很烦人。对于所有参数,我如何同时执行此操作?
我发现最接近的是python 类 __init__ function 的 PyCharm 模板,解决方案不灵活,因为它只支持固定数量的参数。而且,我觉得这是成熟的IDE必须实现的功能,Idea允许这样做。
那篇文章还参考了在 Python 中进行自动属性分配的最佳方法是什么,这是个好主意吗?,其中讨论了autoassign,这似乎有很多缺点。
我的 PyCharm 版本是 2019.1.3 CE。