python – 列出namedtuple子类的属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 列出namedtuple子类的属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1231字,纯文字阅读大概需要2分钟。
内容图文
我有一个扩展了一个namedtuple的小类,但是它的实例的__dict__属性总是返回空.
Point = namedtuple('Point', 'x y')
p1 = Point(20, 15)
print(p1, p1.__dict__)
# Point(x=20, y=15) OrderedDict([('x', 20), ('y', 15)]) <--- ok
class SubPoint(Point): pass
p2 = SubPoint(20, 15)
print(p2, p2.__dict__)
# SubPoint(x=20, y=15) {} <--- why is it empty?
p2具有属性,但其__dict__为空.但它们与dir()正确列出,这很奇怪.请注意,当SubPoint扩展vanilla类时,此工作正常.
发生了什么,我如何列出我的子类实例中的属性?
解决方法:
问题是__slots__仅限于它定义的类,因此基类将始终具有自己的__dict__属性,除非您在那里定义__slots__. (另请注意,namedtuple的__dict__属性不是正常的dict,而是@property.)
从docs开始:
The action of a
__slots__
declaration is limited to the class where it
is defined. As a result, subclasses will have a__dict__
unless they
also define__slots__
(which must only contain names of any additional
slots).
因此,当您在子类中定义__slots__时,它无法在该类中查找属性__dict__,因此转移到找到__dict__属性的基类.
一个简单的演示:
class A:
__slots__= ('a', 'b')
@property
def __dict__(self):
print ('inside A')
return self.__slots__
class B(A):
pass
print(B().__dict__)
print ('-'*20)
class B(A):
__slots__ = ()
print(B().__dict__)
输出:
{}
--------------------
inside A
()
内容总结
以上是互联网集市为您收集整理的python – 列出namedtuple子类的属性全部内容,希望文章能够帮你解决python – 列出namedtuple子类的属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。