静态属性,仅在具体类中为True,在Python中为其子级为False
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了静态属性,仅在具体类中为True,在Python中为其子级为False,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1071字,纯文字阅读大概需要2分钟。
内容图文
问题
假设我有一个Root类,并且想访问(例如初始化)其所有子类.但是,有些子类需要以编程方式忽略.
例
class Root(object):
pass
class Parent(Root):
ignore_me = True
class Child(Parent):
pass
def get_subclasses(klass):
result = klass.__subclasses__()
for subclass in result:
result += get_subclasses(subclass)
return result
subs = [sub for sub in get_subclasses(Root) if not sub.ignore_me]
所以我在这里想要的是,子类列表中包括子类,而不是父类.
平凡的解决方案
当然,我可以为每个子类定义ignore_me属性,但要点是我想将子类与该细节隔离开,以便他们甚至都不会意识到.
题
如何仅通过在Parent类中定义ignore_me属性来实现目标?
解决方法:
您可以使用if sub .__ dict __.get(‘ignore_me’,False)来检查ignore_me属性是否直接出现在给定的子类中(未继承).
但是,您仍然需要以不同的方式执行此操作,因为__subclasses__仅返回直接子类(如documented).如果要遍历所有后代类,则需要编写一些代码来递归调用层次结构中每个类的__subclasses__.像这样:
def getSubs(cls):
for sub in cls.__subclasses__():
if not sub.__dict__.get('ignore_me', False):
yield sub
for desc in getSubs(sub):
yield desc
然后:
>>> list(getSubs(Root))
[<class '__main__.Child'>]
内容总结
以上是互联网集市为您收集整理的静态属性,仅在具体类中为True,在Python中为其子级为False全部内容,希望文章能够帮你解决静态属性,仅在具体类中为True,在Python中为其子级为False所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。