所以:
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实现中实现这一目标?
答案 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
Foo
和Bar
是函数参数的类型。
答案 2 :(得分:-1)
不确定你到底想要实现的目标,但这样的事情可以帮助..
SELECT USERS FROM members WHERE username=username_var