【发布时间】:2018-09-11 02:17:07
【问题描述】:
Python 3.5 中的新 typing 模块提供了许多用于类型注释的工具。是否提供了封装class思想的对象或类型? function的思路怎么样?
在下面定义装饰器的代码中,class_ 应该代表什么? function 应该代表什么? (typing.Callable 是不够的,因为例如一个类是可调用的,但代码试图识别方法。)(typing 模块中的no_type_check() 装饰器本身可能是这样的装饰器的原型。@ 987654327@ 本身没有任何注释,类型提示或其他。)
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
【问题讨论】:
标签: python python-3.x types python-3.5 python-typing