typeutils -类型处理

Python的内置功能 functools 模块在Python的一流函数支持之上构建了几个有用的实用程序。 typeutils 尝试对具有类型和实例的元编程执行相同的操作。

class boltons.typeutils.classproperty(fn)[源代码]

就像一个 property ,但包装的GET函数是一个类方法。为简单起见,只实现只读属性。

boltons.typeutils.get_all_subclasses(cls)[源代码]

递归地查找并返回一个 list 继承的所有类型的 cls

>>> class A(object):
...     pass
...
>>> class B(A):
...     pass
...
>>> class C(B):
...     pass
...
>>> class D(A):
...     pass
...
>>> [t.__name__ for t in get_all_subclasses(A)]
['B', 'D', 'C']
>>> [t.__name__ for t in get_all_subclasses(B)]
['C']
boltons.typeutils.issubclass(subclass, baseclass)[源代码]

就像内置的 issubclass() ,此函数检查是否 subclass 继承自 baseclass 。与内置函数不同,此函数 issubclass 会简单地返回 False 如果任一参数都不合适(例如,如果 subclass 不是 type ),而不是提高 TypeError

参数:
  • subclass (type) -- 要检查的目标类。

  • baseclass (type) -- 基类 subclass 将会被核对。

>>> class MyObject(object): pass
...
>>> issubclass(MyObject, object)  # always a fun fact
True
>>> issubclass('hi', 'friend')
False
boltons.typeutils.make_sentinel(name='_MISSING', var_name=None)[源代码]

创建并返回新的 instance 指一个新的类,适合用作“前哨”,这是一种单例,通常用来表示在下列情况下某个值丢失 None 是有效的输入。

参数:
  • name (str) -- 哨兵的名字

  • var_name (str) -- 将此名称设置为变量在其相应模块中的名称Enable Pickleability。注意:可拾取的前哨应该是位于其模块顶层的全局常量。

>>> make_sentinel(var_name='_MISSING')
_MISSING

Bolton中最常见的用例是作为可选函数参数的缺省值,部分原因是它在自动生成的文档中的外观不那么令人困惑。在队列和链表中,前哨也可以很好地充当占位符。

备注

根据设计,对 make_sentinel 具有相同值的对象不会产生等价的对象。

>>> make_sentinel('TEST') == make_sentinel('TEST')
False
>>> type(make_sentinel('TEST')) == type(make_sentinel('TEST'))
False