Python 2类型注释-如何指定返回类型是特定类的类型或子类型?
因此: 似乎找不到任何文档,搜索相当棘手Python 2类型注释-如何指定返回类型是特定类的类型或子类型?,python,python-2.7,type-hinting,Python,Python 2.7,Type Hinting,因此: 似乎找不到任何文档,搜索相当棘手 奖励:在Python3.5类型提示的实现中如何实现这一点?正确的用法是“rtype:type”“”。您正在指定返回的对象的类型,并且无论您是返回A还是B,您返回的实际对象都是类型的实例。如果运行以下命令,您可以看到这一点: class A(object): pass class B(A): pass def class_factory(letter): """rtype : type[A]""" # is this correct ?
奖励:在Python3.5类型提示的实现中如何实现这一点?正确的用法是
“rtype:type”“”
。您正在指定返回的对象的类型,并且无论您是返回A还是B,您返回的实际对象都是类型的实例。如果运行以下命令,您可以看到这一点:
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
因为在每种情况下都返回类型
,所以返回类型应该是类型
。无法指定您返回的类
对象是否具有特定属性,因为这些属性并不取决于您返回的对象的类型,而是取决于您返回的类型的特定实例。不确定您在这里究竟想实现什么,但类似的内容可能会有所帮助
class A(object): pass
class B(A): pass
print(type(A))
print(type(A()))
print(type(B))
print(type(B()))
文档字符串中的类型提示未标准化。所以有很多答案
也就是说,返回类型是一个返回a实例的函数。也就是说,类是一个返回自身实例的可调用类。这大概是:
>>> class A(object):
pass
>>> class B(A):
pass
>>> def test(letter):
if isinstance(letter,A):
Do something if letter is of object A
elif isinstance(letter,B):
Do something if letter is of object B
其中,Foo
和Bar
是函数的参数类型 已尝试issubclass(B,A)
?您所说的“指定”是什么意思?每个对象都知道它属于哪个类。这不是答案,但听起来好像这个任务可以在A.\uu new\uuu()
中处理。为什么要这样做?是的,谢谢-所以这种情况下没有泛型?正确,因为您返回的两个对象都具有相同的类型(它们都是类)。这就像返回两个Cat
对象,一个名为Scruffy的Cat和一个名为Fluffy的Cat:它们都是相同类型的实例?
(Foo, Bar) -> A