(Python)可以解释一下这个函数在做什么(使用对象属性)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了(Python)可以解释一下这个函数在做什么(使用对象属性),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1524字,纯文字阅读大概需要3分钟。
内容图文
![(Python)可以解释一下这个函数在做什么(使用对象属性)](/upload/InfoBanner/zyjiaocheng/748/e3db81b2bf294bf8a36d12363a29f653.jpg)
我正在对旧的Python脚本执行代码维护.我遇到了一段代码,这让我感到很沮丧.在代码的早期(未在下面的代码段中显示)中,定义了类,具有最小的属性.在代码中,对类中不存在的字段进行赋值.例如
tempvar = MyClassObject()
tempvar.this_field_was_not_defined_in_the_class = 42
稍后在脚本中,变量tempvar通过调用以下内容写入CSV文件:
write_csv('test.csv', tempvar, ('declared_field1', 'declared_field2',
('declared_field3', 'New Label'),
'this_field_was_not_defined_in_the_class') )
这是将对象写入文件的(混淆[to me])函数:
def write_csv(filename, objects, fields, add_weightings=True):
# The items in fields can either be a tuple of the attribute name and a label for that
# attribute, or just an attribute name. In the later case replace it with a tuple with an
# automatically generated label.
fields = list(fields)
for i in xrange(len(fields)):
if isinstance(fields[i], tuple):
continue
else:
fields[i] = (fields[i], fields[i].replace('_', ' '))
with open(filename, 'wb') as f:
f.write(codecs.BOM_UTF8)
c = csv.DictWriter(f, [i[0] for i in fields])
c.writerow(dict(fields))
c.writerows(
[utf8ify(add_weighting(i.__dict__) if add_weightings else i.__dict__) for i in objects])
谁能解释一下发生了什么? BTW utf8ify和add_weighting是脚本中定义的全局函数.
解决方法:
对象没有“不存在”属性.没有声明.
属性仅分配给__init__中的对象或引用该对象的任何代码.那只是标准的Python.
class Whatever( object ):
pass
w = Whatever()
w.new_attribute= "some value"
完全正常. new_attribute属性不是“不存在的”,因为它不需要任何类型的声明.
当你这样做
>>> w.__dict__
在交互式提示符下,您将看到属性存在的位置.
内容总结
以上是互联网集市为您收集整理的(Python)可以解释一下这个函数在做什么(使用对象属性)全部内容,希望文章能够帮你解决(Python)可以解释一下这个函数在做什么(使用对象属性)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。