添加 class 装饰器以继承父文档
Add class decorator to inherit parent docs
我正在尝试向我的包中添加一个实用程序,其中子类将继承超类的文档字符串。这是我到目前为止的设置。
from functools import wraps
import typing as t
def inherit_parent_docs(klass):
@wraps(klass)
def inside(*args: t.Any, **kwargs: t.Any):
parent_doc = B.__bases__[0].__doc__
klass.__doc__ += parent_doc
klass_out = klass(*args, **kwargs)
return klass_out
return inside
class A:
"""super"""
@inherit_parent_docs
class B(A):
"""sub"""
def __init__(self):
pass
但是,这不起作用,因为它说 B
没有 bases
dunder 因为它认为它是一个函数。我检查了一下,很奇怪,type(B)
是 function
。我也尝试包装构造函数,但文档字符串仅在实例化时更新。
我觉得我在这里遗漏了一些明显的东西...
这就是装饰的作用。它将函数 inside
分配给 B
.
所以当你
@inherit_parent_docs
class B(A):
...
这是语法糖:
class B(A):
...
B = inherit_parent_docs(B)
请注意,您可以不 return wrapper
。 Return 修改后的Klass
:
def inherit_parent_docs(klass):
doc = klass.__doc__
parent_doc = klass.__bases__[0].__doc__
klass.__doc__ = f"{doc}\n{parent_doc}\n"
return klass
我正在尝试向我的包中添加一个实用程序,其中子类将继承超类的文档字符串。这是我到目前为止的设置。
from functools import wraps
import typing as t
def inherit_parent_docs(klass):
@wraps(klass)
def inside(*args: t.Any, **kwargs: t.Any):
parent_doc = B.__bases__[0].__doc__
klass.__doc__ += parent_doc
klass_out = klass(*args, **kwargs)
return klass_out
return inside
class A:
"""super"""
@inherit_parent_docs
class B(A):
"""sub"""
def __init__(self):
pass
但是,这不起作用,因为它说 B
没有 bases
dunder 因为它认为它是一个函数。我检查了一下,很奇怪,type(B)
是 function
。我也尝试包装构造函数,但文档字符串仅在实例化时更新。
我觉得我在这里遗漏了一些明显的东西...
这就是装饰的作用。它将函数 inside
分配给 B
.
所以当你
@inherit_parent_docs
class B(A):
...
这是语法糖:
class B(A):
...
B = inherit_parent_docs(B)
请注意,您可以不 return wrapper
。 Return 修改后的Klass
:
def inherit_parent_docs(klass):
doc = klass.__doc__
parent_doc = klass.__bases__[0].__doc__
klass.__doc__ = f"{doc}\n{parent_doc}\n"
return klass