python是否有类似于__setattr__的方法但是对于python类?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python是否有类似于__setattr__的方法但是对于python类?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1484字,纯文字阅读大概需要3分钟。
内容图文
![python是否有类似于__setattr__的方法但是对于python类?](/upload/InfoBanner/zyjiaocheng/815/4be50b9fcb9547279e296d7d7cbce90d.jpg)
目前__setattr__仅适用于此.上课有类似的方法吗?我问这个问题是因为当用户在类中定义它时,我想按顺序收集已定义属性的列表,如下所示:
class CfgObj(object):
_fields = []
def __setattr__(self, name, value):
self._fields.append([name, value])
object.__setattr__(self, name, value)
class ACfg(CfgObj):
setting1 = Field(str, default='set1', desc='setting1 ...')
setting2 = Field(int, default=5, desc='setting2...')
我知道上面的代码不会按预期工作,因为__setattr__只按实例调用如下:
acfg = ACfg()
acfg.c = 1
acfg._fields == [['c', 1]]
那么,python类有没有等效的__setattr__?主要目的是在用户在类中定义时按顺序收集define属性.
解决方法:
我要做的是解决你的问题 – 而不是你的问题 – 是设置字段创建的时间戳创建一个Field对象的计数器,并将计数器的当前值设置为创建的对象:
class Field(object):
count = 0
def __init__(self, value, default=None, desc=None):
self.value = value
self.default = default
self.desc = desc
# Here comes the magic
self.nth = Field.count
Field.count += 1
# self.created_at = time.time()
然后我会创建一个方法来返回按其计数器值排序的所有字段:
class CfgObj(object):
def params(self):
ns = dir(self)
fs = [getattr(self, field)
for field in ns
if isinstance(getattr(self, field), Field)]
# fs = sorted(fs, key=lambda f: f.created_at)
fs = sorted(fs, key=lambda f: f.nth)
return fs
它的用法很直观:
class ACfg(CfgObj):
setting1 = Field(str, default='set1', desc='setting1 ...')
setting2 = Field(int, default=5, desc='setting2...')
print ACfg().params()
显然,字段是按对象创建时间排序的,而不是字段创建,但它对您来说已经足够了.是吗?
内容总结
以上是互联网集市为您收集整理的python是否有类似于__setattr__的方法但是对于python类?全部内容,希望文章能够帮你解决python是否有类似于__setattr__的方法但是对于python类?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。