4

Python 3.5の新しいtypingモジュールには、型注釈で使用するためのツールが多数用意されています。クラスの概念をカプセル化するオブジェクトまたはタイプを提供しますか? 関数の考え方はどうですか?

デコレータを定義する次のコードでは、何を表す必要があり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
4

1 に答える 1

3

クラスは type のインスタンスですtype

関数の型はtypes.FunctionTypeまたはtypes.BuiltinFunctionTypeです。

メソッドのタイプはtypes.MethodTypeortypes.BuiltinMethodTypeです。

typesは Python の一部でした... 非常に長い間。

于 2015-12-25T00:40:53.273 に答える