【发布时间】:2018-12-28 09:38:45
【问题描述】:
已编辑:假设我有一些继承自 SuperFoo 抽象类的类:
from abc import ABCMeta, abstractmethod
class SuperFoo(object):
__metaclass__ = ABCMeta
@abstractmethod
def do_something():
pass
class Foo(SuperFoo):
def __init__(self):
pass
def do_something():
pass
class Bar(SuperFoo):
def __init__(self):
pass
def do_something():
pass
还有一个以SuperFoo 的子类作为参数的文档化函数:
def build(super_foo):
"""
Instantiate a SuperFoo class and do some other stuff.
@param super_foo: The subclass whose constructor will be called
@type super_foo: ??? <--- What to use here?
@return: An instance of a SuperFoo subclass
@rtype: SuperFoo
"""
# Do some stuff
instance = class_name() # Instantiate class
return instance
foo = build(Foo)
bar = build(Bar)
我应该在函数的文档字符串中使用什么@type?它不能是SuperFoo,因为它对应于SuperFoo 的一个实例,而不是类型本身。
【问题讨论】:
-
1) Python 中的一切都是对象。 2) 它的类型实际上就是...
type. -
A name 将是一个字符串,例如
"Foo"。你实际上是在传递一个 object. -
在 python 中,一切都是对象。话虽如此,当我们在您的示例 Foo 中编写一个类时,python 中的所有类都继承了元类类型。 @type 表示您传递的类应该是继承 Meta Class 类型的类。要检查此行为,请尝试运行 type(Foo) >>>
。我希望我能解释你的问题 -
不是类名本身。它是类对象本身。
-
@GerardoFigueroa 和
object实例不可调用。object类当然是可调用的。所有类都是可调用的,这就是你如何实例化它们。
标签: python class types docstring