Python 2类型注释 - 如何指定返回类型是特定类的类型或子类型?

时间:2016-05-14 19:09:07

标签: python python-2.7 type-hinting

所以:

class A(object): pass

class B(A): pass

def class_factory(letter):
    """rtype : type[A]""" # is this correct ?
    if letter == 'A': return A # note no parenthesis ! returns the type, not an instance
    elif letter == 'B': return B
    raise NotImplementedError

似乎无法找到任何文档,搜索也相当棘手。

奖励:如何在类型提示的python 3.5实现中实现这一目标?

3 个答案:

答案 0 :(得分:0)

正确的用法是"""rtype: type"""。您正在指定返回的对象的类型,无论您是返回A还是B,您返回的实际对象都是type的实例。如果您运行以下命令,则可以看到此内容:

class A(object): pass
class B(A): pass
print(type(A))
print(type(A()))
print(type(B))
print(type(B()))

因为您在每种情况下都返回type,所以返回类型应为type。无法指定返回的class对象具有特定属性,因为这些属性不依赖于您返回的对象的类型,而是依赖于特定的实例输入你的类型。

答案 1 :(得分:0)

doc字符串中的类型提示未标准化。所以有很多答案。

话虽如此,我会说你的返回类型是一个返回A实例的函数。也就是说,一个类是一个返回其自身实例的可调用类。这将是:

(Foo, Bar) -> A

FooBar是函数参数的类型。

答案 2 :(得分:-1)

不确定你到底想要实现的目标,但这样的事情可以帮助..

SELECT USERS FROM members WHERE username=username_var