类型模块中的什么类型描述了一个类?什么类型描述了一个函数?

2024-04-26

The new typingPython 3.5 中的 module 提供了许多用于类型注释的工具。它是否提供了封装以下思想的对象或类型class?怎么样的想法function?

在下面定义装饰器的代码中,应该代表什么class_?应该代表什么function? (typing.Callable是不够的,因为例如一个类是可调用的,但代码试图识别方法。)(no_type_check()装饰器在typing模块本身可能是类似这样的装饰器的原型。no_type_check()本身没有任何注释、类型提示或其他。)

import typing

def is_double_underscore_name (name):
    return len(name) > 4 and name.startswith('__') and name.endswith('__')

# This code will not run, because 'class_' and 'function' are names that do not have any
# predefined meaning. See the text of the question.

# Note: This modifies classes in-place but (probably) does not modify functions in-place;
# this is not a considered design decision; it is just the easiest thing to do in a very
# basic example like this.
def do_something (class_or_function: typing.Union[class_, function]):
    if isinstance(class_or_function, class_):
        for name in class_or_function.__dict__:
            if not is_double_underscore_name(name):
                object = class_or_function.__dict__[name]
                if isinstance(object, function):
                    class_or_function.__dict__[name] = do_something(object)
        return class_or_function
    else:
        ... # return the function, modified in some way

类是类型的实例type.

函数有以下类型types.FunctionType or types.BuiltinFunctionType.

方法有以下类型types.MethodType or types.BuiltinMethodType.

types已经成为 Python 的一部分......很长一段时间了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型模块中的什么类型描述了一个类?什么类型描述了一个函数? 的相关文章

随机推荐