melobot.typ¶
- class melobot.typ.LogicMode[源代码]¶
基类:
Enum
逻辑模式枚举类型
- AND = 'and'¶
- OR = 'or'¶
- NOT = 'not'¶
- XOR = 'xor'¶
- melobot.typ.is_type(obj: T, hint: type[Any]) TypeIs[T] [源代码]¶
检查 obj 是否是类型注解 hint 所表示的类型
- 参数:
obj (T) -- 任意对象
hint (type[Any]) -- 任意类型注解
- 返回:
布尔值
- 返回类型:
TypeIs[T]
- class melobot.typ.BetterABCMeta[源代码]¶
基类:
ABCMeta
更好的抽象元类,兼容 ABCMeta 的所有功能,但是额外支持
abstractattr()
- class melobot.typ.BetterABC[源代码]¶
基类:
object
更好的抽象类,兼容 ABC 的所有功能,但是额外支持
abstractattr()
- melobot.typ.abstractattr(obj: Callable[[Any], T] | None = None) T [源代码]¶
抽象属性
与 abstractproperty 相比更灵活,abstractattr 不关心你以何种形式定义属性。只要子类在实例化后,该属性存在,即认为合法。
但注意它必须与
BetterABC
或BetterABCMeta
或SingletonBetterABCMeta
配合使用这意味着可以在类层级、实例层级定义属性,或使用 property 定义属性:
class A(BetterABC): foo: int = abstractattr() # 声明为抽象属性 # 或者使用装饰器的形式声明,这与上面是等价的 @abstractattr def bar(self) -> int: ... # 以下实现都是合法的: class B(A): foo = 2 bar = 4 class C(A): foo = 3 def __init__(self) -> None: self.bar = 5 class D(A): def __init__(self) -> None: self.foo = 8 @property def bar(self) -> int: return self.foo + 10
- 参数:
obj (Callable[[Any], T] | None)
- 返回类型:
T
- class melobot.typ.VoidType[源代码]¶
基类:
Enum
空类型,需要区别于 None 时使用
# 有些时候 `None` 也是合法值,因此需要一个额外的哨兵值: def foo(val: Any | VoidType = VoidType.VOID) -> None: ...
- VOID = <class 'melobot.typ._enum._VOID'>¶
- class melobot.typ.AsyncCallable[源代码]¶
基类:
Protocol
[P
,T_co
]用法:AsyncCallable[P, T]
是该类型的等价形式:Callable[P, Awaitable[T]]
- class melobot.typ.SyncOrAsyncCallable[源代码]¶
基类:
Protocol
[P
,T_co
]用法:SyncOrAsyncCallable[P, T]
是该类型的等价形式:Callable[P, T | Awaitable[T]]
- melobot.typ.T¶
泛型 T,无约束
- melobot.typ.U¶
泛型 U,无约束
- melobot.typ.V¶
泛型 V,无约束
- melobot.typ.T_co¶
泛型 T_co,协变无约束