栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Python中自动设置类成员变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Python中自动设置类成员变量

请注意

class Foo(object):    a = None

Foo
的dict中设置一个键值对:

Foo.__dict__['a']=None

def __init__(self, a = None, b = None, c = None):    self.a = a

在Foo实例对象的dict中设置一个键值对:

foo=Foo()foo.__dict__['a']=a

因此,在您定义的顶部设置类成员与在您定义的下半部分(位于)内实例属性的设置没有直接关系

__init__

另外,很高兴知道这

__init__
是Python的 initializer
__new__
是类的 构造函数


如果您正在寻找一种基于

__init__
的参数自动添加某些实例属性的方法,则可以使用以下方法:

import inspectimport functoolsdef autoargs(*include,**kwargs):       def _autoargs(func):        attrs,varargs,varkw,defaults=inspect.getargspec(func)        def sieve(attr): if kwargs and attr in kwargs['exclude']: return False if not include or attr in include: return True else: return False         @functools.wraps(func)        def wrapper(self,*args,**kwargs): # handle default values for attr,val in zip(reversed(attrs),reversed(defaults)):     if sieve(attr): setattr(self, attr, val) # handle positional arguments positional_attrs=attrs[1:]  for attr,val in zip(positional_attrs,args):     if sieve(attr): setattr(self, attr, val) # handle varargs if varargs:     remaining_args=args[len(positional_attrs):]     if sieve(varargs): setattr(self, varargs, remaining_args)      # handle varkw if kwargs:     for attr,val in kwargs.iteritems():         if sieve(attr): setattr(self,attr,val)  return func(self,*args,**kwargs)        return wrapper    return _autoargs

所以当你说

class Foo(object):    @autoargs()    def __init__(self,x,path,debug=False,*args,**kw):        passfoo=Foo('bar','/tmp',True, 100, 101,verbose=True)

您会自动获得以下实例属性:

print(foo.x)# barprint(foo.path)# /tmpprint(foo.debug)# Trueprint(foo.args)# (100, 101)print(foo.verbose)# True

PS。尽管我写了这篇文章(出于娱乐目的),但我不建议您将其

autoargs
用于认真的工作。言外之意是简单,清晰和无误的。我不能这样说
autoargs

PPS。 是我一个人,还是许多按钮坏了?编辑器窗口丢失了所有图标… :(清除浏览器缓存可解决此问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号