mpe*_*pen 16 python syntax constructor kwargs
有没有一种方法可以定义,__init__因此定义的关键字**kwargs被分配给类?
例如,如果我要初始化一个ValidationRule类ValidationRule(other='email'),self.other则应将值添加到类中,而不必为每个可能的kwarg明确命名.
class ValidationRule:
def __init__(self, **kwargs):
# code to assign **kwargs to .self
Run Code Online (Sandbox Code Playgroud)
ony*_*ony 23
我认为在stackoverflow上的某个地方我见过这样的解决方案.无论如何它看起来像:
class ValidationRule:
__allowed = ("other", "same", "different")
def __init__(self, **kwargs):
for k, v in kwargs.iteritems():
assert( k in self.__class__.__allowed )
setattr(self, k, v)
Run Code Online (Sandbox Code Playgroud)
此类仅接受列有白名单属性名称的参数__allowed.
Gab*_*abe 15
这可能不是最干净的方式,但它有效:
class ValidationRule:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
Run Code Online (Sandbox Code Playgroud)
我认为我更喜欢ony的解决方案,因为它限制了可用的属性,以便在输入来自外部源时避免麻烦.
sth*_*sth 12
你可以这样做:
class ValidationRule:
def __init__(self, **kwargs):
for (k, v) in kwargs.items():
setattr(self, k, v)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6566 次 |
| 最近记录: |