在Python类构造函数中有“self.somevariable = somevariable”的快捷方式吗? [英] Is there a shortcut for `self.somevariable = somevariable` in a Python class constructor?

查看:364
本文介绍了在Python类构造函数中有“self.somevariable = somevariable”的快捷方式吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Python中的构造函数通常如下所示:

Constructors in Python often look like this:

class SomeClass:
    def __init__(self, a, b = None, c = defC):
        self.a = a
        self.b = b or []
        self.c = c

有一个快捷方式,例如简单定义 __ init __(self,** kwargs)并使用键作为 self

Is there a shortcut for this, e.g. to simply define __init__(self,**kwargs) and use the keys as properties of self?

推荐答案

self.__dict__.update(locals())

包括 self ,所以你得到 self.self 。最好从 locals()中过滤 self

is that it includes self, so you get self.self. It would be better to filter self out of locals()

例如

vars(self).update((k,v) for k,v in vars().items() if k != 'self')

您可以防止意外覆盖方法

You can defend against accidentally overwriting methods with this variation

vars(self).update((k,v) for k,v in vars().items()
                   if k != 'self' and k not in vars(self))

if any(k in vars(self) for k in vars()):
    raise blahblah
vars(self).update((k,v) for k,v in vars().items() if k != 'self')

这篇关于在Python类构造函数中有“self.somevariable = somevariable”的快捷方式吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆