弃用

用于弃用类、函数和函数参数的装饰器。

类型变量

class T
TypeVar('T')

函数

deprecated(func: Callable[[...], T], since: str | None = None, until: str | None = None, replacement: str | None = None, message: str | None = '') Callable[[...], T][source]
deprecated(func: None = None, since: str | None = None, until: str | None = None, replacement: str | None = None, message: str | None = '') Callable[[Callable[[...], T]], Callable[[...], T]]

用于将可调用对象标记为弃用的装饰器。

被装饰的可调用对象在使用时将发出警告。弃用可调用对象的文档字符串(docstring)会进行调整,以表明该可调用对象已被弃用。

参数:
  • func – 要装饰的函数。不应由用户设置。

  • since – 弃用开始的版本或日期。

  • until – 弃用可调用对象被移除的版本或日期。

  • replacement – 替换弃用可调用对象的标识符。

  • message – 可调用对象被弃用的原因。

返回:

被装饰的可调用对象。

返回类型:

可调用对象

示例

基本用法

from manim.utils.deprecation import deprecated

@deprecated
def foo(**kwargs):
    pass


@deprecated
class Bar:
    def __init__(self):
        pass

    @deprecated
    def baz(self):
        pass


foo()
# WARNING  The function foo has been deprecated and may be removed in a later version.

a = Bar()
# WARNING  The class Bar has been deprecated and may be removed in a later version.

a.baz()
# WARNING  The method Bar.baz has been deprecated and may be removed in a later version.

您可以指定更多信息以获得更精确的警告

from manim.utils.deprecation import deprecated


@deprecated(
    since="v0.2", until="v0.4", replacement="bar", message="It is cooler."
)
def foo():
    pass


foo()
# WARNING  The function foo has been deprecated since v0.2 and is expected to be removed after v0.4. Use bar instead. It is cooler.

您也可以使用日期而非版本

from manim.utils.deprecation import deprecated


@deprecated(since="05/01/2021", until="06/01/2021")
def foo():
    pass


foo()
# WARNING  The function foo has been deprecated since 05/01/2021 and is expected to be removed after 06/01/2021.
deprecated_params(params=None, since=None, until=None, message='', redirections=None)[source]

用于将可调用对象的参数标记为弃用的装饰器。

它也可以用于将弃用的参数值自动重定向到其替代值。

参数:
  • params (str | Iterable[str] | None) –

    要弃用的参数。可以包含

    • 一个字符串可迭代对象,其中每个元素代表一个要弃用的参数

    • 单个字符串,参数名称由逗号或空格分隔。

  • since (str | None) – 弃用开始的版本或日期。

  • until (str | None) – 弃用可调用对象被移除的版本或日期。

  • message (str) – 可调用对象被弃用的原因。

  • redirections (None | Iterable[tuple[str, str] | Callable[[...], dict[str, Any]]]) –

    参数重定向列表。每个重定向可以是以下之一

    • 一个包含两个字符串的元组。第一个字符串定义弃用参数的名称;第二个字符串定义要重定向到的参数的名称,当尝试使用第一个字符串时。

    • 执行映射操作的函数。函数的参数名称决定了哪些参数用作输入。函数必须返回一个包含重定向参数的字典。

    重定向的参数也会被隐式弃用。

返回:

被装饰的可调用对象。

返回类型:

可调用对象

抛出:
  • ValueError – 如果未定义任何参数(无论是显式还是隐式)。

  • ValueError – 如果定义的参数是无效的 Python 标识符。

示例

基本用法

from manim.utils.deprecation import deprecated_params

@deprecated_params(params="a, b, c")
def foo(**kwargs):
    pass


foo(x=2, y=3, z=4)
# No warning

foo(a=2, b=3, z=4)
# WARNING  The parameters a and b of method foo have been deprecated and may be removed in a later version.

您还可以指定额外信息以获得更精确的警告

from manim.utils.deprecation import deprecated_params


@deprecated_params(
    params="a, b, c",
    since="v0.2",
    until="v0.4",
    message="The letters x, y, z are cooler.",
)
def foo(**kwargs):
    pass


foo(a=2)
# WARNING  The parameter a of method foo has been deprecated since v0.2 and is expected to be removed after v0.4. The letters x, y, z are cooler.

基本参数重定向

from manim.utils.deprecation import deprecated_params


@deprecated_params(
    redirections=[
        # Two ways to redirect one parameter to another:
        ("old_param", "new_param"),
        lambda old_param2: {"new_param22": old_param2},
    ]
)
def foo(**kwargs):
    return kwargs


foo(x=1, old_param=2)
# WARNING  The parameter old_param of method foo has been deprecated and may be removed in a later version.
# returns {"x": 1, "new_param": 2}

使用计算值进行重定向

from manim.utils.deprecation import deprecated_params


@deprecated_params(
    redirections=[lambda runtime_in_ms: {"run_time": runtime_in_ms / 1000}]
)
def foo(**kwargs):
    return kwargs


foo(runtime_in_ms=500)
# WARNING  The parameter runtime_in_ms of method foo has been deprecated and may be removed in a later version.
# returns {"run_time": 0.5}

将多个参数值重定向到一个

from manim.utils.deprecation import deprecated_params


@deprecated_params(
    redirections=[lambda buff_x=1, buff_y=1: {"buff": (buff_x, buff_y)}]
)
def foo(**kwargs):
    return kwargs


foo(buff_x=2)
# WARNING  The parameter buff_x of method foo has been deprecated and may be removed in a later version.
# returns {"buff": (2, 1)}

将一个参数重定向到多个

from manim.utils.deprecation import deprecated_params


@deprecated_params(
    redirections=[
        lambda buff=1: {"buff_x": buff[0], "buff_y": buff[1]}
        if isinstance(buff, tuple)
        else {"buff_x": buff, "buff_y": buff}
    ]
)
def foo(**kwargs):
    return kwargs


foo(buff=0)
# WARNING  The parameter buff of method foo has been deprecated and may be removed in a later version.
# returns {"buff_x": 0, buff_y: 0}

foo(buff=(1, 2))
# WARNING  The parameter buff of method foo has been deprecated and may be removed in a later version.
# returns {"buff_x": 1, buff_y: 2}