Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2类型注释-如何指定返回类型是特定类的类型或子类型?_Python_Python 2.7_Type Hinting - Fatal编程技术网

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